프로그래머스LV2_8

코딩테스트 스터디

목록 보기
30/39

예상 대진표

접근 과정

  1. 해당 번호(num)에 따라 다음 라운드 부여 번호는 (num + 1) / 2가 된다.
  2. 라운드가 같아질 때까지 계속 반복하면 된다.

시행착오

  • 시행착오 없이 접근 과정대로 구현하여 해결

해결 코드

    class Solution
    {
        public int solution(int n, int a, int b)
        {
            int answer = 0;
            while(a != b){
                a = (a + 1) / 2;
                b = (b + 1) / 2;
                answer++;
            }
            return answer;
        }
    }

시간복잡도

O(logN)O(logN)

할인 행사

접근 과정

  1. 10일 연속으로 봤을 때 원하는 물품과 할인이 같아야 하므로 할인 품목 배열을 0부터 할인 품목 길이의 -10보다 작거나 같을 때까지 반복
  2. 반복할 때 해시맵을 활용하여 할인 품목과 개수를 넣는다.
  3. 원하는 품목의 개수와 맵의 할인 품목의 개수과 맞으면 answer을 1늘림
  4. 반복이 끝나면 answer을 반환하여 해결

시행착오

  • 시행착오 없이 접근 과정대로 구현하여 해결

해결 코드

    import java.util.*;
    
    class Solution {
        public int solution(String[] want, int[] number, String[] discount) {
            int answer = 0, l = 0;
            for(int num : number) l += num;
            Map<String, Integer> m = new HashMap<>();
            for(int i = 0; i <= discount.length - l; i++){
                m.clear();
                for(int j = i; j < i + l; j++){
                    m.put(discount[j], m.getOrDefault(discount[j], 0) + 1);
                }
                boolean possible = true;
                for(int j = 0; j < want.length; j++){
                    String w = want[j];
                    int num = number[j];
                    if(m.getOrDefault(w, 0) != num){
                        possible = false;
                        break;
                    }
                }
                if(possible) answer++;
            }
            return answer;
        }
    }

시간복잡도

O(NL)O(N * L)
profile
개발자가 되기 위해 열심히 춤추는 중이에요 🕺

0개의 댓글