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

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 1 ≤ n ≤ 30

코드 작성

def solution(n):
    # 0으로 채워진 초기 배열 지정
    arr = [[0 for i in range(n)] for j in range(n)]
    # 시작 위치, 방향 설정
    x, y = 0, 0
    direc = 'r'
    
    for i in range(n**2):
        arr[x][y] = i+1
        if direc == 'r':
            if y == n-1 or arr[x][y+1] != 0:
                direc = 'd'
                x += 1
            else:
                y += 1
        elif direc == 'd':
            if x == n-1 or arr[x+1][y] != 0:
                direc = 'l'
                y -= 1
            else:
                x += 1
        elif direc == 'l':
            if y == 0 or arr[x][y-1] != 0:
                direc = 'u'
                x -= 1
            else:
                y -= 1
        elif direc == 'u':
            if x == 0 or arr[x-1][y] != 0:
                direc = 'r'
                y += 1
            else:
                x -= 1
    return arr

나선형으로 1 ~ n**2 의 숫자를 배치해야하기 때문에 숫자를 입력하는 방향을 x축을 기준으로 오른쪽, y축을 기준으로 아래, x축을 기준으로 왼쪽, y축을 기준으로 위를 반복하도록 했다. 축을 기준으로 끝에 위치했거나 진전하는 과정에서 그 다음 위치에 있는 값이 이미 채워져있다면 다시 방향을 전환하는 식으로 조건문을 작성했다.


2. 특별한 이차원 배열 2

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요. = 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

제한사항

  • 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
  • 1 ≤ arr의 원소의 원소 ≤ 1,000
  • 모든 arr의 원소의 길이는 같습니다.

코드 작성

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


3. 정사각형으로 만들기

이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 1 ≤ arr의 길이 ≤ 100
  • 1 ≤ arr의 원소의 길이 ≤ 100
    • arr의 모든 원소의 길이는 같습니다.
  • 1 ≤ arr의 원소의 원소 ≤ 1,000

코드 작성

def solution(arr):
    col = len(arr[0])
    row = len(arr)
    answer = arr
    
    if col == row:
        return arr
    elif col > row:
        for _ in range(col-row):
            answer.append([0 for _ in range(col)])
    elif col < row:
        for a in answer:
            for _ in range(row-col):
                a.append(0)
    return answer


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

2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 1 ≤ board의 길이 ≤ 100
  • 1 ≤ board[i]의 길이 ≤ 100
    • 1 ≤ board[i][j] ≤ 10,000
    • 모든 board[i]의 길이는 같습니다.
  • 0 ≤ k < board의 길이 + board[i]의 길이

코드 작성

def solution(board, k):
    answer = 0
    for i, b in enumerate(board):
        for j in range(len(b)):
            if i+j <= k:
                answer += board[i][j]
    return answer

코드 작성(한줄 요약)

def solution(board, k):
    return sum([board[i][j] for i in range(len(board)) for j in range(len(board[i])) if i+j <=k])


📍 문제 출처


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기