본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv1 [PCCE 기출문제] 9번 / 이웃한 칸 (python)

by 개발하는 호랑이 2024. 2. 1.

[PCCE 기출문제] 9번 / 이웃한 칸

 

 

풀이

어려운 문제는 아니다. 반복문만 쓸 줄 알면 바로 풀 수 있다.
1. 우선 board가 주어지므로 이를 활용한다. 또한 board와 board [n]의 길이는 같음을 인지.
2. 문제에서 적힌대로만 풀어도 문제없지만, 난 내 방식대로 dr, dc를 만들어서 상하좌우로 돌아가는 것을 이용했다. 이때 h가 dr과 w가 dc와 연결된다.
3. 상하좌우 4개이므로 for문을 4까지 반복하면서 각 dr[0]~dr[3], dc [0]~dc [3]을 이용하여, 찾으려는 board의 상, 하, 좌, 우에 같은 색이 있는지 확인한다.
3-1. 이 때, dr과 dc를 사용하다 범위를 벗어나게 되면 런타임에러나 인덱스 아웃이 뜨기에 찾는 범위를 0 <= h+ dr [i] < len(board) 로지 정해준다.
4. 같은 값이 있으면 answer에 +1 하고 끝나면, answer를 return 한다.

# 각 칸마다 색이 칠해진 2차원 격자 보드판 위, 아래, 왼쪽, 오른쪽 칸 중 같은 색깔로 칠해진 칸의 개수
def solution(board, h, w):
    N = len(board)
    # 상, 하, 좌, 우
    dc = [0,0,-1,1]
    dr = [-1,1,0,0]
    # 상하좌우 몇개가 해당 칸과 같은 색인지 구하기
    
    answer = 0
    for i in range(4):
        if 0<= h+dr[i] < N and 0<= w+dc[i] < N and board[h][w] == board[h+dr[i]][w+dc[i]]:
            answer += 1
    return answer

다른 사람 풀이

아래 방법은 d를 이용하지 않고, 모든 방법을 if 문을 이용한 방식이다. 확인해야 하는 구간이 짧다면 문제없지만 길면 작성에 오래 걸리고 또 작성하면서 꼬일 수도 있다.

def solution(board, h, w):
    answer = 0

    if 0 < h:
        if board[h][w] == board[h-1][w]: answer += 1
    if 0 < w:
        if board[h][w] == board[h][w-1]: answer += 1
    if h < len(board) - 1:
        if board[h][w] == board[h+1][w]: answer += 1
    if w < len(board[0]) - 1:
        if board[h][w] == board[h][w+1]: answer += 1

    return answer

아래는 당황스러운 코드여서 들고 와봤다.
누군진 몰라도 대단하다.. 엄랭을 가져올 생각을 하다니;;;;;;
사람이름이 어떻게 엄준식.

def solution(엄, 준, 식):
    엄준식,어엄,준식 =int(),int(not ()),len(엄)
    엄준식화이팅=[[어엄-어엄,어엄],[어엄,어엄-어엄],[-어엄, 어엄-어엄],[어엄-어엄,-어엄]]
    for 주운 in 엄준식화이팅:
        어떻게,사람이름이=준+주운[어엄-어엄],식+주운[어엄]
        if 어엄-어엄 <= 어떻게<준식 and 어엄-어엄<=사람이름이<준식:
            if 엄[준][식]==엄[어떻게][사람이름이]:
                엄준식+=어엄
    return 엄준식