Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 회고
  • Object
  • javascript
  • 기초
  • 코칭스터디
  • 프로그래머스
  • 자바스크립트
  • react
  • 리액트
  • vite
  • 코딩테스트
  • typescript
  • Error
  • ReactNative
  • 백준
  • Git
  • react-native

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

<BEAKJOON / node.js> 11047 동전 0
Study/Algorithm

<BEAKJOON / node.js> 11047 동전 0

2022. 5. 22. 11:46
https://www.acmicpc.net/problem/11047

// test.txt
10 4790
1
5
10
50
100
500
1000
5000
10000
50000

그리디 문제에 처음 도전 해보았다. 그래서 내장함수 보다는 while 이나 for 문을 사용해 케이스를 탐색해보는 식으로 해결했다.

so1 으로 제출해 문제는 맞췄지만, 시간이 1900ms나 나와버려서.. 다른 해결 방법을 찾아봤다.

 

sol1

let [n,...input] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let [num,price] = n.split(' ');
price = Number(price);

function solution(num,price,input) {
  let len = num-1;
  let answer = 0;
  while(price !== 0) {
    if(price < input[len]) len--;
    else {
      answer++;
      price -=input[len];
    }
  }
  return answer;
}

console.log(solution(num,price,input));	//12

price로 주어진 금액보다 높은 금액을 if문에서 거르고, 낮은 금액을 한 번씩 빼는 식으로 해결했다.

 

sol2

let [n,...input] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let [num,price] = n.split(' ').map(Number);

solution(num,price,input);

function solution(num,price,input) {
  let answer = 0;
  for(let i=num;i>=0;i--) {
    while(input[i]<=price) {
      price-= input[i];
      answer++;
    }
  }
  console.log(answer);
}
//12

 

if문으로 동전의 배열을 도는 대신 for문으로 뒤에서 앞으로 순회한다. 해결방식은 역으로 price 보다 작은 동전들이 while 문에 걸리면 price가 동전 값보다 작아질 때까지 카운트하고 탈출한다. 

 


똑같이 while 문으로 순회하기 때문에 순회방식의 차이 보다는 범위의 차이로 시간 차이가 많이 나는 것 같다. 시간복잡도나 코드의 효율성에 대해서 더 공부한 후 다시 해결해봐야겠다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

<BEAKJOON / node.js> 11399 ATM  (0) 2022.05.24
[BEAKJOON / node.js] 1931 회의실 배정  (0) 2022.05.24
<programmers / JavaScript> 로또의 최고 순위와 최저 순위  (0) 2022.05.18
[programmers / JavaScript] K번째 수  (0) 2022.05.06
[BEAKJOON / node.js] 5533 유니크  (0) 2022.05.02
    'Study/Algorithm' 카테고리의 다른 글
    • <BEAKJOON / node.js> 11399 ATM
    • [BEAKJOON / node.js] 1931 회의실 배정
    • <programmers / JavaScript> 로또의 최고 순위와 최저 순위
    • [programmers / JavaScript] K번째 수
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바