반응형
1. 정수를 나선형으로 배치하기
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
입출력 예
n | result |
4 | [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]] |
5 | [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
행 \ 열0123
행/열 | 0 | 1 | 2 | 3 |
0 | 1 | 2 | 3 | 4 |
1 | 12 | 13 | 14 | 5 |
2 | 11 | 16 | 15 | 6 |
3 | 10 | 9 | 8 | 7 |
따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.
입출력 예 #2
- 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
제출 답안
import Foundation
func solution(_ n: Int) -> [[Int]] {
// n × n 크기의 이차원 배열 초기화
var result = Array(repeating: Array(repeating: 0, count: n), count: n)
// 방향을 정의: 오른쪽(0), 아래(1), 왼쪽(2), 위(3)
let directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
var directionIndex = 0 // 현재 방향 인덱스
// 현재 위치를 초기화
var row = 0
var col = 0
for num in 1...(n * n) {
result[row][col] = num // 현재 위치에 숫자 배치
// 다음 위치 계산
let nextRow = row + directions[directionIndex].0
let nextCol = col + directions[directionIndex].1
// 다음 위치가 배열 범위를 벗어나거나 이미 값이 채워져 있으면 방향 전환
if nextRow < 0 || nextRow >= n || nextCol < 0 || nextCol >= n || result[nextRow][nextCol] != 0 {
directionIndex = (directionIndex + 1) % 4 // 시계방향으로 방향 전환
}
// 새로운 방향에 따라 위치 업데이트
row += directions[directionIndex].0
col += directions[directionIndex].1
}
return result
}
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의 원소의 길이는 같습니다.
입출력 예
arr | result |
[[5, 192, 33], [192, 72, 95], [33, 95, 999]] | 1 |
[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]] | 0 |
import Foundation
func solution(_ arr: [[Int]]) -> Int {
let n = arr.count // 배열의 크기 (n x n)
// 대칭 확인을 위한 이중 반복문
for i in 0..<n {
for j in 0..<n {
// arr[i][j]와 arr[j][i]가 다르면 대칭 아님
if arr[i][j] != arr[j][i] {
return 0 // 대칭이 아니므로 0 반환
}
}
}
return 1 // 모든 값이 대칭이면 1 반환
}
3. 정사각형으로 만들기
이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 100
- 1 ≤ arr의 원소의 길이 ≤ 100
- arr의 모든 원소의 길이는 같습니다.
- 1 ≤ arr의 원소의 원소 ≤ 1,000
입출력 예
arr | result |
[[572, 22, 37], [287, 726, 384], [85, 137, 292], [487, 13, 876]] | [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]] |
[[57, 192, 534, 2], [9, 345, 192, 999]] | [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]] |
[[1, 2], [3, 4]] | [[1, 2], [3, 4]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 arr은 행의 수가 4, 열의 수가 3입니다. 행의 수가 더 많으므로 열의 수를 4로 만들기 위해 arr의 각 행의 끝에 0을 추가한 이차원 배열 [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]를 return 합니다.
입출력 예 #2
- 예제 2번의 arr은 행의 수가 2, 열의 수가 4입니다. 열의 수가 더 많으므로 행의 수를 4로 만들기 위해 arr의 각 열의 끝에 0을 추가한 이차원 배열 [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]을 return 합니다.
입출력 예 #3
- 예제 3번의 arr은 행의 수와 열의 수가 2로 같습니다. 따라서 0을 추가하지 않고 [[1, 2], [3, 4]]을 return 합니다.
제출 답안
import Foundation
func solution(_ arr: [[Int]]) -> [[Int]] {
let rowCount = arr.count // 행(row)의 개수
let colCount = arr[0].count // 열(column)의 개수
let size = max(rowCount, colCount) // 정사각형 크기 결정
var result = arr
// 열(column) 수가 부족하면 0을 추가
for i in 0..<rowCount {
result[i] += Array(repeating: 0, count: size - colCount)
}
// 행(row) 수가 부족하면 새로운 행 추가
while result.count < size {
result.append(Array(repeating: 0, count: size))
}
return result
}
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]의 길이
입출력 예
board | k | result |
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]] | 2 | 8 |
입출력 예 설명
입출력 예 #1
- 입출력 예 #1의 board를 표로 나타내면 다음과 같습니다.
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
1 | 1 | 2 | 3 |
2 | 2 | 3 | 4 |
3 | 3 | 4 | 5 |
- i + j가 2보다 작거나 같은 항들의 합은 0 + 1 + 2 + 1 + 2 + 2 = 8이므로 8을 return 합니다.
제출 답안
import Foundation
func solution(_ board: [[Int]], _ k: Int) -> Int {
let rowCount = board.count // 행 개수
let colCount = board[0].count // 열 개수
var sum = 0 // 합을 저장할 변수
// 모든 (i, j) 위치를 탐색
for i in 0..<rowCount {
for j in 0..<colCount {
if i + j <= k { // 조건을 만족하면 합산
sum += board[i][j]
}
}
}
return sum
}
반응형
'프로그래머스 기초문제' 카테고리의 다른 글
[프로그래머스 기초문제] Day 24 조건문 활용, 반복문 활용, 이차원 리스트(배열) (0) | 2025.03.26 |
---|---|
[프로그래머스 기초문제] Day 23 조건문 활용 (0) | 2025.03.18 |
[프로그래머스 기초문제] Day 22 함수(메서드), 조건문 활용 (0) | 2025.03.17 |
[프로그래머스 기초문제] Day 21 함수 (메서드) (0) | 2025.03.16 |
[프로그래머스 기초문제] Day 20 함수(메서드) (0) | 2025.03.13 |