해쉬에 participant 다 넣어주고 completion으로 다 빼주고나면 keySet에 들어잇는 key는 단 1개가 남게되는데 그거 return해주면 끝 12345678910111213141516171819202122232425262728293031323334353637 public String solution(String[] participant, String[] completion) { String answer = ""; HashMap hm = new HashMap(); for (String p : participant) { if (!hm.containsKey(p)) hm.put(p, 1); else { hm.put(p, hm.get(p) + 1); } } // for(String s : hm...
알고리즘 풀이
이해가 안되는거 주석으로 써놓음 아직도 이해안감 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 public int solutionFin(int distance, int[] rocks, int n) { int answer = 0; Arrays.sort(rocks); // for(int i : rocks){ // System.out.println(i); // } // System.out.println(); int cnt, current; int left = 0, right = distance, mid = 0; while (left
재풀이햇는데도 오래걸렷다.. 맨처음에는 테케3까지만 맞다가 기존에 참조해서 맞춘 코드 보면서 비교햇는데 알고보니 int와 long캐스팅사이에서 문제가 발생한 것으로 보인다. 그 다음은 마지막 테케9번이었는데 zeroRestNum(나누어서 나머지가 0이되는 숫자들의 개수) 정의된 for문을 foreach문으로 하면 안되고 (index=0인 경우는 패스해주어야 하므로) for문으로 바꿔서 해주니까 풀었다.. 진짜 왜 틀렸는지 모르겠는 문제중 하나였는데 (짜임새는 맞는데 코딩이 어디서 틀렸는지 모르는 경우) 내가 이분탐색에 아직까지 잘못알고있었나 mid+1, mid-1이나 start
재귀함수 기본문제 옛날 학부시절때 n개가 늘어날 때 왜 이걸 그 루트를 파고들어서 이해하고 싶어 햇는지 행여나 최적의 경로를 못찾을 수도 잇지 않을까 이런 걱정을 하기도 햇는데 재귀함수에 대한 이해가 아예 없어서 그랫나보다 n이 늘어날수록 이걸 컴퓨터가 어떠한 경로로 하노이의탑을 만드는지 1path씩 쪼개서 보면 이해하기가 힘들고 n-1을 buffer에 1을 end에 n-1을 end에를 만들어줘서 속도가 빠른 컴퓨터 니가 해결해라는 식으로 문제를 풀어줘야함 n이 늘어날수록 복잡해진 과정을 이해하려고 할 필요도 없고 이해할 수도 없음 1234567891011121314151617181920212223242526272829303132333435 static StringBuilder sb; static Arr..
s를 n으로 나눈 몫의 값이 result 성분들의 최소값이고 나머지는 최소값보다 1큰 성분들의 개수이다. 대충 아무거나 경우의 수를 만들어서 이 명제가 맞다고 가정하고 풀엇고 정답이었다. 이런 규칙찾는 문제는 100%확신을 가지고 풀 수는 없는 것 같다. 1234567891011121314151617181920 public int[] solution(int n, int s) { int[] answer = new int[n]; int min = s / n; if (min = 0; i--) { input = min; if (rest-- > 0) input++; answer[i] = input; } return answer; }Colored by Color Scriptercs
처음에 규칙을 어떻게 찾는지 헤맷다 처음에는 for문을 사용해서 앞자리를 1,2,3,4,...,n순으로 찾아내는 방식으로 하려고 햇는데 그보다 더 좋은 방법은 몫과 나머지를 이용하는 방법이었다. 중요한 것 k를 1개 빼주고(그래야 순서가 맞아떨어짐) unit의 단위를 맞춰주고, 오름차순 정렬된 사람의 순서 List를 통해 index를 뽑아와서 answer배열에 넣어주어야 한다는 것이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 public int[] solution1(int n, long k) { int[] answer = new int[n]; if (n == 1) { answer[0] =..
쉬운데 5점이나 줫다 풀면서 문제가 이렇게 쉽다고? 생각했는데 진짜 쉬웟다 이게 기둥과보랑 같이 있는 문제라는 것이 믿겨지지 않는다. 처음에는 Solution으로 풀었는데 (반복문 쓰면 통과 못할까봐) 그냥 Solution1처럼 반복문 쓰고 풀어도 풀린다 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 public long solution1(int n, int[] works) { PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); long answer = 0; long sum = 0; ..
테케 1번을 자꾸 못 뚫어서 뭐지 싶었는데 long[] dp = new int[n+1]의 메모리 때문에 통과를 못한 것 같다. long변수 3개 (answer, a, b) 만들어서 그냥 돌려써야함 123456789101112131415161718192021public long solution(int n) { long answer = 1; long a = 1, b = 2; if (n == 1) return 1; if (n == 2) return 2; // long dp[] = new long[n+1]; // dp[1]=1; // dp[2]=2; for (int i = 3; i <= n; i++) { // dp[i] = (dp[i-2] + dp[i-1])%1234567; answer = (a + b) % 1..
220605 어렵ㅠ 220317 dp[i]를 dp[m]으로 바꾸는게 훨씬 보기 편할 수도.. 차라리 dp[money] 풀네임 쓰거나 i, j로 쓰면 헷갈릴 수가 있음 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import java.util.*; class Solution { public int solution(int n, int[] moneys) { Arrays.sort(moneys); int[] dp = new int[n+1]; dp[0] = 1; for(int money=1; money 1,2,5원 3개 사용 가능한 경우 dp[1][5] -> 1,2원 2종류의 동전들을 사용하여 5원을 거슬러줄 수 있는 경우의 수 dp[0][10] -> 1원 1종류의 동..
삭제 부분에 직감적으로 실수할 것 같아서 짬시키는중 ============================================================ 코드 다시 엎어서 2번째 도전햇는데도 37점인가가 한계였다 솔직히 카카오 너무 악랄한 것 같다 테케라도 5개정도 던져주던가 구글에 레퍼런스 코드가 있기는 했지만 이런 구현은 풀이법이 아니라 안틀리고 짜는 것이 중요하기 때문에 스스로 할 수 있다고 판단되므로 나중에 재도전해야겠다 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172// 지금 하는 중인데 삭제부분..