-
- 풀이 날짜 : 2023.07.24 월요일
- 문제 : 바탕화면 정리
- 문제 출처 : 프로그래머스
- 깃허브 링크 : https://github.com/ChaerryStorage/Algorithm.git
GitHub - ChaerryStorage/Algorithm: 로직 구현 능력 향상을 위한 코딩 연습
로직 구현 능력 향상을 위한 코딩 연습. Contribute to ChaerryStorage/Algorithm development by creating an account on GitHub.
github.com
def solution(wallpaper): answer = [] minx, miny = len(wallpaper), len(wallpaper) maxx, maxy = 0, 0 for x,l in enumerate(wallpaper): for y,s in enumerate(l): if s == '#': if int(x) <= minx: minx = x if int(y) <= miny: miny = y if int(x)+1 >= maxx: maxx = int(x)+1 if int(y)+1 >= maxy: maxy = int(y)+1 else: pass answer = [minx, miny, maxx, maxy] return answer wallpaper = ['...', '.#.'] res = solution(wallpaper) print(res) >>> [1, 1, 2, 2]
접근
- 처음엔 input으로 들어온 wallpaper의 좌표를 아래 이미지처럼 다 확인해봤다.(검정 숫자) 그래서 ['...', '..#'] 이런 식으로 들어오는 input을 아래 처럼 좌표로 다 만들어줘야하나? 싶었음.
- 그러면 시간이 오래 걸릴 것 같아서 return이 되는 부분만 주황색으로 밑줄을 쳐봤다. 근데 그 중에서도 빨간색으로 동그랗게 체크한 부분이 return이 되는 것을 확인.
- 그럼 저 부분을 어떻게 잡지? 결국 다 좌표로 바꿔줘야하나? 하다가~~ 결국 대각선에 있는 부분, 좌표 상으로 생각했을 땐 left upper, right down 부분만 체크하면 되는 것을 확인!
- 아래 이미지에서 노란색 밑줄 친 부분을 보면, 대각선 좌표 2개를 x1, y1, x2, y2로 나열했을 때, x1, y1은 left upper 중에 가장 작아야되고, x2, y2는 right down 중에 가장 커야한다. 물론 비교할 때도 x1은 x1끼리, y1은 y1끼리 비교해야함.
그런 식으로 풀어봤다.
결과
- 프로그래머스에서 제공하는 테스트 케이스에서는 통과인데, 제출 했을 때 21번 테스트 케이스에서만 틀리는 결과가 나옴. 그래서 질문을 올려두었고, 코딩 고수가 답변을 주면 그 때 다시 보완을 해보자!!