👉 사용 언어 : PYTHON3
✅ Solution
def solution(wallpaper):
_wallpaper = [[],[]]
for i in wallpaper:
origin = i
while '#' in i:
if i in wallpaper:
_wallpaper[0].append(wallpaper.index(i))
_wallpaper[1].append(i.find('#'))
i = i.replace('#', ' ', 1)
wallpaper[wallpaper.index(origin)] = ' '
return [min(_wallpaper[0]), min(_wallpaper[1]), max(_wallpaper[0])+1, max(_wallpaper[1])+1]
👉 아이디어
- x좌표, y좌표 넣을 이중리스트를 생성한다.
- x좌표의 중복을 막기 위해 if문을 사용하여 조건을 걸어준다.
- 이미 존재하는 index일 경우, 추가하지 않는 방법으로!
- #가 존재하는 y좌표도 배열 내 두번째 배열에 추가한다.
- 한 열에 여러 개가 존재해도 모두 체크할 수 있도록 .replace()를 사용하여 앞에서부터 1개씩 ' '로 치환한다.
- wallpaper 배열 원소가 중복될 경우, wallpaper.index(i)에서 해당 문자열을 갖는 원소들 중 맨 앞 원소의 인덱스만 반환하므로 치환하기 전의 i값을 받아두었던 변수 origin을 사용하여 해당 문자열 원소를 ' '로 치환한다.
- max 좌표는 파일 크기(1*1)로 인해 모두 +1 씩 해주어 반환한다.
✅ 다른 사람 풀이 참고
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]
👉 깨달은 것 / 알게된 것
- 이중 배열로 선언할 필요 없이 별개의 배열 2개를 선언하는 것이 더 보기 좋고 효율적인 코드를 작성할 수 있다.
- wall 배열의 인덱스를 범위로 사용하여 중첩 반복문을 돌림으로써 "#"을 찾는 코드가 더 간결해졌다.
- 또한, 중복되었을 때 발생하는 문제도 발생하지 않는다.
- 좀 더 쉽게 문제를 바라보도록...!
'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글
| 외계어 사전 (0) | 2024.01.21 |
|---|---|
| 약수의 개수와 덧셈 (0) | 2024.01.20 |
| 삼각형의 완성조건(2) (0) | 2024.01.18 |
| [1/25] Kakao Internship 기출문제 풀이 (0) | 2024.01.18 |
| [1/18] Kakao Internship 기출문제 풀이 (0) | 2024.01.11 |