728x90
재풀이햇는데도 오래걸렷다..
맨처음에는 테케3까지만 맞다가 기존에 참조해서 맞춘 코드 보면서 비교햇는데
알고보니 int와 long캐스팅사이에서 문제가 발생한 것으로 보인다.
그 다음은 마지막 테케9번이었는데
zeroRestNum(나누어서 나머지가 0이되는 숫자들의 개수) 정의된 for문을 foreach문으로 하면 안되고
(index=0인 경우는 패스해주어야 하므로)
for문으로 바꿔서 해주니까 풀었다..
진짜 왜 틀렸는지 모르겠는 문제중 하나였는데
(짜임새는 맞는데 코딩이 어디서 틀렸는지 모르는 경우)
내가 이분탐색에 아직까지 잘못알고있었나 mid+1, mid-1이나 start<=end 같은 것으로 해줘야하나
진짜 뭐 때문에 틀렸는지 고통이 많은 문제였다.. 내가 짜고 싶은 짜임새로 짜고 싶어서 일어난 문제인 듯 하다.
=====================================
저같은 경우는 테케3번까지만 맞았는데
테케 4~8번은 long int 캐스팅 변환을 제대로 해주어야함 그냥 나는 int를 long으로 싸그리 교체했더니 해결됏음
테케 9번은 2, {1,2,2,2,100} 같은 경우..
result는 2.......
2초까지 통과 가능한 인원수는 총 5명
2/1 + 2/2 + 2/2 + 2/2 + 2/100 = 5값인데
times[0]을 제외하고 times[1]~times[3]을 하나씩 빼줄 수 있으므로
인원수는 2명 ~ 5명이 가능하다
그 범위안에 문제에서 요구하는 2명또한 충족되므로 조건을 맞게끔 해주면 되는 듯 합
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | public long solution(int nInput, int[] timesInput) { long answer = Long.MAX_VALUE; long n = (long) nInput; long[] times = new long[timesInput.length]; for (int i = 0; i < times.length; i++) { times[i] = (long) timesInput[i]; // System.out.println((long)times[i]); } Arrays.sort(times); long start = 0; long end = times[times.length - 1] * n; long mid = 0; long exMid = -1; long exSum = -1; long sum = 0; // for(int i=0; i<times.length; i++){ // System.out.println(times[i]); // } long zeroRestNum = 0; while (true) { sum = 0; mid = (start + end) / 2; zeroRestNum = 0; if (exMid == mid) break; // System.out.println("min mid max"); // System.out.println(min + " " + mid + " " + max); // 여기 떄문이었다. foreach문써주지말고 이렇게 i=0인부분을 제외하고 zeroRestNum을 추가해줘야햇다. for (int i = 0; i < times.length; i++) { sum += (mid / times[i]); if (i != 0 && mid % times[i] == 0) zeroRestNum++; } if (sum >= n) { end = mid; // answer=mid; // 개인적으로 제일 납득 안되는 부분.. } else start = mid; // System.out.println(zeroRestNum); if (sum >= n && sum - zeroRestNum <= n) { if (answer > mid) answer = mid; } // System.out.println(sum); exMid = mid; } return answer; } | cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 완주하지 못한 선수 (해시) (0) | 2019.11.30 |
---|---|
프로그래머스 - 징검다리 (이분탐색) (0) | 2019.11.29 |
프로그래머스 - 하노이의 탑 (재귀함수) (0) | 2019.11.28 |
프로그래머스 - 최고의 집합 (규칙찾기) (0) | 2019.11.28 |
프로그래머스 - 줄 서는 방법 (규칙 찾기) (0) | 2019.11.28 |