본문 바로가기
💻 하나씩 차곡차곡/프로그래머스 (Python)

코딩 기초 트레이닝 Day25 - 정수를 나선형으로 배치하기, 특별한 이차원 배열 2, 정사각형으로 만들기, 이차원 배열 대각선 순회하기

by 뚜루리 2023. 11. 8.
728x90
320x100

 

 

정수를 나선형으로 배치하기

def solution(n):
    answer = [[None for j in range(n)] for i in range(n)]
    move = [[0, 1], [1, 0], [0, -1], [-1, 0]]
    x, y, m = 0, 0, 0
    for i in range(1, n**2 + 1):
        answer[y][x] = i
        if y + move[m][0] >= n or x + move[m][1] >= n or answer[y + move[m][0]][x + move[m][1]]:
            m = (m + 1) % len(move)
        y, x = y + move[m][0], x + move[m][1]
    return answer
def solution(n):
    if n == 1:
        return [[1]]
    
    answer = [[0 for j in range(n)] for i in range(n)] # 배열 초기화
    
    x = 0
    y = 0
    dir = 'r'
    
    for i in range(n*n):
        answer[x][y] = i + 1
        if dir == 'r':
            y += 1
            if y == n-1 or answer[x][y+1] != 0: # 맨 끝에 도달했거나 가려는 곳에 이미 값이 있으면 방향 전환
                dir = 'd'
        elif dir == 'd':
            x += 1
            if x == n-1 or answer[x+1][y] != 0:
                dir = 'l'
        elif dir == 'l':
            y -= 1
            if y == 0 or answer[x][y-1] != 0:
                dir = 'u'
        elif dir == 'u':
            x -= 1
            if x == n-1 or answer[x-1][y] != 0:
                dir = 'r'
                
    return answer
  • 출처 - 프로그래머스 다른사람 풀이 + https://oogg-zg3qy.tistory.com/12
  • 이것은 내 풀이가 아니고 다른 분들의 풀이다. 나는 뜯어봐야 한다 ㅠ

 

특별한 이차원 배열 2

def solution(arr):
    answer = 1
    
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            if arr[i][j] != arr[j][i]:
                answer = 0
    
    return answer

 

 

정사각형으로 만들기

def solution(arr):
    answer = [[]]
    
    x = len(arr)
    y = len(arr[0])

    if x > y :
        for i in range(len(arr)):
            for j in range(x-y):
                arr[i].append(0)
    elif x < y :
        for i in range(y-x):
                arr.append([0]*len(arr[0]))
            
    else :
        return arr

    return arr

 

 

이차원 배열 대각선 순회하기

def solution(board, k):
    answer = 0
    
    for i in range(len(board)):
        for j in range(len(board[i])):
            if i+j <= k :
                answer += board[i][j]
            
    return answer
728x90
320x100