본문 바로가기

알고리즘풀이/프로그래머스

바탕화면 정리

👉 사용 언어 : 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