일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 파이썬
- 자료구조
- ftz level13
- LoB
- 암호수학
- PHP
- 시간복잡도
- 파일 시스템
- System
- c언어
- pwnable.kr
- 재귀
- SWiFT
- Java
- 정렬 알고리즘
- 스택
- C
- windosw 문자열
- 미로 탐색 알고리즘
- 두근두근 자료구조
- 큐
- ftz
- Stack
- level13
- OSI
- windosws wbcs
- HTML
- War Game
- web
- 백준
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 백준 1022 소용돌이 예쁘게 출력하기 본문
반응형
https://www.acmicpc.net/problem/1022
1. 문제이해
- 0행 0열 반시계 방향 순서로 숫자가 작성된 표를 입력 받은 크기 만큼 출력하기
- 출력할 때 가장 큰 숫자의 자릿수 만큼 채워야 함(자릿수가 부족할 때 공백으로 채우기)
2. 접근방법
- 테이블 채우기
- 제한 사항 때문에 입력 받은 네 점의 크기 만큼만 2차원 배열을 만들어야 함
- 메모리는 제한되었지만 시간에 대해서는 5000*5000으로 여유
- 수를 순서대로 증가시키고 표의 크기 내부인 경우에만 표에 접근하여 저장하면 됨
- 반시계 방향 소용돌이에 맞게 인덱스를 수정하기
- 출력
- 최대 값의 길이만큼 자릿수 채우기
3. 코드
func solution(){
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let r1 = input[0]
let r2 = input[2]
let c1 = input[1]
let c2 = input[3]
var map = Array(repeating: Array(repeating: 0, count: c2-c1+1), count: r2-r1+1)
var maxValue = 0
func fill(){
// 우, 상, 좌, 하 순서
let dx = [0, -1, 0, 1]
let dy = [1, 0, -1, 0]
var dIndex = 0
var x = 0
var y = 0
var currentNum = 1
var countForTurn = 1 // 몇 번 이동할 때마다 회전 해야 하는지
var moveCount = 0 // countForTurn을 위한 이동 횟수
while map[0][0] == 0 || map[r2-r1][0] == 0 || map[0][c2-c1] == 0 || map[r2-r1][c2-c1] == 0{
if x >= r1, x <= r2, y >= c1, y <= c2{
map[x-r1][y-c1] = currentNum
}
currentNum += 1
moveCount += 1
x = x + dx[dIndex]
y = y + dy[dIndex]
if moveCount == countForTurn{
moveCount = 0
if dIndex == 1 || dIndex == 3 { // 왼쪽, 오른쪽 방향일 때 방향을 꺽기까지 이동하는 횟수가 증가함
countForTurn += 1
}
dIndex = (dIndex + 1) % 4
}
}
maxValue = currentNum - 1 // 가장 큰 수 저장 (가장 큰 수의 길이)
}
func printResult(){
let strLen = String(maxValue).count
for i in 0..<r2-r1+1{
for j in 0..<c2-c1+1{
print(String(format: "%\(strLen)d", map[i][j]), terminator: " ")
}
print()
}
}
fill()
printResult()
}
solution()
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 타겟넘버 (0) | 2025.03.18 |
---|---|
[Swift] 프로그래머스 여행경로 (0) | 2025.03.12 |
[Swift] 프로그래머스 Lv3 상담원 민원 (0) | 2025.03.03 |
[Swift] 백준 비슷한 단어 2179 (0) | 2025.02.17 |
[Swift] 백준 미로 보수 30689 (0) | 2025.02.11 |