프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 모던자바스크립트딥다이브
  • MySQL
  • 자바스크립트알고리즘
  • JavaScript
  • nomadcoders
  • 자바스크립트비트마스크
  • Til
  • 스파르타코딩클럽
  • 내일배움단
  • 투포인터알고리즘
  • 알고리즘
  • 코드스테이츠
  • 코딩프로젝트
  • nomadcoder
  • vanilaJS
  • 2023 인프콘 후기
  • 내일배움카드
  • 국비지원
  • 비트마스크

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/알고리즘 w.JavaScript

[알고리즘]백준 2839번: 설탕 배달 W_node.js

2022. 6. 15. 20:34

문제

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

풀이

const readFileSyncAddress = '/dev/stdin';

const fs = require('fs');
let [input] = fs
  .readFileSync(readFileSyncAddress)
  .toString()
  .trim()
  .replaceAll(/\r/g, '')
  .split(/\n/g)
  .map((v) => +v);

const solution = function (n) {
  let x = 1;
  let y = 1;
  while (5 * y < n) {
    y++;
  }
  if (5 * y === n) return y;
  while (y >= 0) {
    if (3 * x + 5 * y === n) return x + y;
    y--;
    if (3 * x + 5 * y === n) return x + y;
    x++;
  }
  return -1;
};

console.log(solution(input));

3x + 5y = N 일 때, x + y의 최솟값을 찾는 방식으로 접근했다.

먼저 x와 y 값은 1에서 출발하고, 최솟값을 만들기 위해 큰 숫자에 곱해지는 y의 최댓값을 while 문을 사용해서 구했다. 

그 뒤 5y가 n인 경우 가장 최솟값인 y를 리턴한다.

그렇지 않을 경우, y가 0 혹은 0이하가 될 때까지 3x + 5y 비교 > y 값 감소 > 비교 > x값 증가 의 과정을 거쳐 최소값이 되는 지점을 찾는다.

어떤 경우에도 n이 될 수 없을 때 -1을 리턴한다.

다른 답안

const readFileSyncAddress = '/dev/stdin';

const solution = function (n) {
  let cnt = 0;

  while (true) {
    if (n % 5 === 0) {
      return n / 5 + cnt;
    } else if (n <= 0) {
      return -1;
    }
    n -= 3;
    cnt++;
  }
};

console.log(solution(input));

위 답안은 구글링을 통해 참고한 다른 답안이다.

먼저 n 이 5로 나누어 떨어질 때, n / 5와 cnt를 리턴한다. n이 0 이하일 경우 -1을 리턴한다.

n에서 3을 빼고, 카운트를 올린 후, 위로 올라가 과정을 반복한다. 

내 답안에서 x를 증가하고 비교하고, y를 감소하고 다시 비교한 과정을 나누어 떨어졌을 때의 나눈 값(5짜리 설탕봉지) + cnt (3짜리 설탕봉지) 로 더 간략하게 비교할 수 있다.

저작자표시 (새창열림)

'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글

[알고리즘]백준 1978번: 소수 찾기 W_node.js  (0) 2022.06.16
[알고리즘]백준 10757번: 큰 수 A+B W_node.js  (0) 2022.06.16
[알고리즘]백준 10250번: ACM 호텔 W_node.js  (0) 2022.06.10
[알고리즘]백준 2869번: 달팽이는 올라가고 싶다 W_node.js  (0) 2022.06.08
[알고리즘]백준 1193번: 분수찾기 W_node.js  (0) 2022.06.08
    'Algorithm & 자료구조/알고리즘 w.JavaScript' 카테고리의 다른 글
    • [알고리즘]백준 1978번: 소수 찾기 W_node.js
    • [알고리즘]백준 10757번: 큰 수 A+B W_node.js
    • [알고리즘]백준 10250번: ACM 호텔 W_node.js
    • [알고리즘]백준 2869번: 달팽이는 올라가고 싶다 W_node.js
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바