[★python_파이썬_복습]프로그래머스_LV1_바탕화면 정리_풀이

2024. 5. 6. 22:08코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/xIwG6SXqE9Q?feature=shared

문제가 너무 길다.

지금 실력으로 읽고 해석하는데만 최소 30분~1시간이다. 

일단 해석하자면 최소의 드래그의 좌표를 뽑아내는 것이다.

 

1. 처음에는 DFS로 모든 공간에 한번씩 들어가서 True(파일), False(빈공간)을 표시한 후 (0, 0)부터 모든 좌표를 돌면서 파일 전체가 들어가고 + 최소 빈공간의 조합을 생각했다.

 ==> 이건 코드로 구현을 전혀 못하겠다.

 

2. 그래서 힌트(강남 메가스터디 강사)를 얻어서 방향설정을 했다.

표의 제일 위 / 제일 왼쪽 / 제일 아래쪽 / 제일 밑에 집중하자.

 

3. 문제의 예시들을 하나씩 보자.

 

입출력 예 #2를 보면 제일 위쪽은 (1, 5), 제일 왼쪽은 (3, 3), 제일 밑은 (4, 4), 제일 오른쪽은 (2, 7)이다.

정답은[1, 3, 5, 8]이다.

제일 위와 제일 왼쪽을 포함하기 위해서는 제일 위쪽의 x값과 제일 왼쪽의 y값이 포함되어야 한다.

제일 밑과 제일 오른쪽을 포함하기 위해서는 제일 밑의 x값과 제일 오른쪽의 y값에서 각 +1을 해야 한다.

 

4. 자 일단 이 가설을 세웠으니 다른 예제를 보면서 이 가설이 맞는지 확인해보자. ==> 맞는다.

 

5. 하지만 이제부터 시작이다.

이 문제를 처음 24년 4월 3일인가 스타트를 했고 그 이후로 프로그래머스의 문제들을 풀기가 두려워서

백준으로 넘어가서 실버2를 만들었다. (24년 5월초)

 

어렵긴 하지만 이제 코드가 보인다. 

아래의 코드는 중간 중간 print를 하면서 결과값을 비교해 가면서 작성한 코드이다.

 

sorted의 key값을 활용해서 오름차순을 통제할 수 있는 것도 백준 문제를 풀면서 학습한 결과이다. 

<백준 : 4월 2일~5월6일까지 총 123문제를 풀었다.>

 

<첫번째 시도 : 통과>

#제일 위 x값 + 제일 왼쪽 y값 / 제일 밑 x값 + 제이 오른쪽 y값
#제일 작은 x값, 제일 작은 y값, 제일 큰 x값 + 1, 제일 큰 y값 + 1
def solution(wallpaper):
    entire = []
    for x, i in enumerate(wallpaper):
        for y, j in enumerate(i):
            if j == '#':
                entire.append([x, y])
    MIN_X = sorted(entire, key=X_value)
    MIN_Y = sorted(entire, key=Y_value)
   
    return [MIN_X[0][0], MIN_Y[0][1], MIN_X[-1][0] + 1, MIN_Y[-1][1] + 1]

def X_value(temp):
    return temp[0]

def Y_value(temp):
    return temp[1]

 

#제일 위 x값 + 제일 왼쪽 y값 / 제일 밑 x값 + 제이 오른쪽 y값

#제일 작은 x값, 제일 작은 y값, 제일 큰 x값 + 1, 제일 큰 y값 + 1

이 2가지를 전제로 코드를 만들어가니 코드가 보인다.

 

더욱 열심히 해보자!!!!

 

<다른사람풀이 : 심플-나도 이걸 생각했으나....내 머리와 손은 이 코드가 안나오네....>

def solution(wall):
    a, b = [], []
    for i in range(len(wall)):
        for j in range(len(wall[i])):
            if wall[i][j] == "#":
                a.append(i)
                b.append(j)
    return [min(a), min(b), max(a) + 1, max(b) + 1]

 

728x90
반응형