[23.10.25] TIL

yy·2023년 10월 24일

개발일지

목록 보기
11/122

오늘 할 일

  • 시니어한테 물어볼거 리스트업 (~ 목요일 오전까지 정리햇 매니저한테 넘기기)
  • (완료)오전 알고리즘 문제 풀기
  • (완료) 노드 교과서 읽기



1. 콜라문제

https://school.programmers.co.kr/learn/courses/30/lessons/132267

function solution(a, b, n) {
    let countCola = 0;
    while (n >= a) {
        let emptyCola = (n - (n % a)); 
        let changeCola = Math.floor(emptyCola * (b/a));
        countCola += changeCola;
        n = n - emptyCola + changeCola 
    }
    return countCola;
}

위의 코드를 아무리해도 테스트 케이스 중 2개가 자꾸 실패가 떴다.

테스트 케이스를 돌려봤는데도 잘 돌아갔다. 대체 어떤 테스트 케이스란 말인가...

n의 수도 늘려서 테스트 케이스를 하던 중 사람들의 코드와 비교하는데 자꾸 b에 대한 언급이 나왔다. 사람들이 b를 자꾸 빼먹는다는 것이었다. 나는 빼먹지 않았으니 걱정할건 없다고 생각했는데 혹시...?! 라는 생각이 들었다.

혹시 *(b/a)의 연산 부분이 잘못된걸까?! 싶어서 아래와 같이 바꿔봤다.

그랬더니 놀랍게도 ...! 통과...!

(b/a) 소수 혹은 정수를 emptyCola에 곱하는거랑 a를 나누고 소수부분을 지운 정수에 b를 곱하는거랑 값이 당연히 같을 수는 없는 것!



<성공한 코드>

function solution(a, b, n) {
    let countCola = 0;
    while (n >= a) {
        let emptyCola = (n - (n % a)); 
        let changeCola = Math.floor(emptyCola / a) * b;
        countCola += changeCola;
        n = n - emptyCola + changeCola 
    }
    return countCola;
}

N개의 최대공약수 구하는 방법
https://kimhaksung.tistory.com/entry/python3GCD
profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글