TIL

2023-10-27(프로그래머스)

우성팔 2023. 10. 27.

덧칠하기

문제 설명을 요약하자면 n = 벽의 길이, m = 칠하는 롤러의 길이, section = 칠해야 하는 범위, 반환값 = 최소한으로 모두 칠하는 횟수


내가 떠올린 것

section으로 주어지는 값의 첫번째 값을 시작으로 롤러의 길이(m)만큼 띄워서 그다음 값을 찾아보자

 

Python

def solution(n, m, section):
    answer = 0
    i = 1

    while i <= n:
        if i in section:
            i += m-1 # -1을 해주지 않으면 그 다음값까지 포함
            answer += 1
        i += 1

    return answer

처음에 이렇게 작성을 하였었는데 테스트케이스중 3개에서 시간초과발생해서 예전에 사용했던 딕셔너리를 사용하였다

 

def solution(n, m, section):
    answer = 0
    i = 1
    section_map = {x: i for i, x in enumerate(section)}
    
    while i <= n:
        if i in section_map:
            i += m-1
            answer += 1
        i += 1

    return answer

딕셔너리를 사용해서 작성을 하였더니 바로 해결되었다

 

 

def solution(n, m, section):
    answer = 1
    prev = section[0]
    for sec in section:
        if sec - prev >= m: # m만큼의 롤러 길이 이상이 차이가 나면 한번의 페인트칠에 포함 되지 않는 경우
            prev = sec
            answer += 1

    return answer

다른 분이 푼 방법인데 이 방법도 간단해서 좋은 것 같다

 

 

JAVA

public static int solution(int n, int m, int[] section) {
        int answer = 0, a = 0;
        HashMap<Integer,Integer> section_HashMap = new HashMap<>();

        for(int i = 0 ; i < section.length ; i ++ ){
            section_HashMap.put(section[i],i);
        }

        while(a <= n){
            if (section_HashMap.get(a) != null){
                a += m - 1;
                answer ++;
            }
            a ++;
        }
        return answer;
    }

파이썬에서 딕셔너리를 사용했다면 java에서는 HashMap을 사용!

 

	int answer = 1;
        int prev = section[0];
        for(int i = 1; i < section.length; i++) {
            if(section[i] - prev >= m) {
                prev = section[i];
                answer++;
            }
        }
        return answer;

파이썬에서 다른분이 푸신 것을 이용해서 java로 풀어본 경우

 


※ 딕셔너리를 사용하는 주된 이유

→ 검색 연산을 빠르게 만들기 위해서!

딕셔너리의 검색 연산은 평균적으로 O(1)의 시간 복잡도를 가지기 때문에 리스트나 다른 자료 구조보다 빠른 검색이 가능

'TIL' 카테고리의 다른 글

2023-11-14 TIL  (1) 2023.11.14
2023-11-13 TIL(Optional)  (5) 2023.11.13
2023-10-26 TIL(프로그래머스)  (0) 2023.10.26
2023-10-25 TIL(객체 지향 프로그래밍의 특징, 프로그래머스)  (0) 2023.10.25
2023-10-24 TIL(프로그래머스)  (0) 2023.10.24

댓글