1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ์ ํ์ ์ธ ๋ฌํฝ์ด ๋ฐฐ์ด ๋ฌธ์
- ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ 1000์ด๋ฏ๋ก O(N^2) ์ฆ, ์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๊ณ ๋ฆฌ์ฆ์ 2์ฐจ์ ๋ฐฐ์ด์ ํ ๋๋ฆฌ์ ์ฌ์ ๊ณต๊ฐ์ ๋์ด์ ๋ฐฐ์ด index ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ ๋ ฅํ K์ ๊ฐ์ด R * C๋ณด๋ค ํฐ ๊ฒฝ์ฐ ์ข์์ ๋ฐฐ์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก ํด๋น ๊ฒฝ์ฐ๋ฅผ ์์ธ์ฒ๋ฆฌ ํจ.
- ๋ฌธ์ ์์๋ ์ผ์ชฝ ์๋๊ฐ (1, 1)์ด์ง๋ง ์ค์ ๋ฐฐ์ด์์๋ ์ผ์ชฝ ์๋๊ฐ (1, 6)์ด๋ฏ๋ก (1, 6)๋ถํฐ ํ์์ ์์ํจ
- ์ ๋ฐฉํฅ ์ด๋์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ์ ์ธ๋ฑ์ค(y์ถ ์ด๋)๊ฐ false์ผ ๊ฒฝ์ฐ์๋ง ํ์ฌ ์ข์์ true๋ฅผ ์ค ์ ์๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ์ข์์์ ํ์์ ๋ฉ์ถค
- ์ค๋ฅธ์ชฝ ๋ฐฉํฅ ์ด๋์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ๋ค์ ์ธ๋ฑ์ค(x์ถ ์ด๋)๊ฐ false์ผ ๊ฒฝ์ฐ์๋ง ํ์ฌ ์ข์์ true๋ฅผ ์ค ์ ์๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ์ข์์์ ํ์์ ๋ฉ์ถค
- ์๋ ๋ฐฉํฅ ์ด๋์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ์๋ ์ธ๋ฑ์ค(y์ถ ์ด๋)๊ฐ false์ผ ๊ฒฝ์ฐ์๋ง ํ์ฌ ์ข์์ true๋ฅผ ์ค ์ ์๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ์ข์์์ ํ์์ ๋ฉ์ถค
- ์ผ์ชฝ ๋ฐฉํฅ ์ด๋์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ์ ์ธ๋ฑ์ค(x์ถ ์ด๋)๊ฐ false์ผ ๊ฒฝ์ฐ์๋ง ํ์ฌ ์ข์์ true๋ฅผ ์ค ์ ์๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ์ข์์์ ํ์์ ๋ฉ์ถค
- ์ 5 ~ 8๋ฒ ๊ณผ์ ์ ์ํํ๋ฉด์ ์ข์ ๋ฒํธ๋ฅผ 1๋ฒ ๋ถํฐ ์ฆ๊ฐ์ํค๊ณ , ์ข์ ๋ฒํธ๊ฐ K๊ฐ๊ณผ ์ผ์น ํ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ ๊ทธ ๋์ (x, y) ์ขํ๋ฅผ ๊ณ์ํด์ ๊ธฐ์ตํด์ค์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
5. ์ ์ฒด ์ฝ๋
//
// main.swift
// Seat
//
// Created by ์ด์์ฌ on 2022/02/20.
//MARK: - seat
//MARK: - Frameworks
import Foundation
//MARK: - Types
struct Seat {
//MARK: - Properties
var R: Int //์ข์์ ๊ฐ๋กํฌ๊ธฐ
var C: Int //์ข์์ ์ธ๋กํฌ๊ธฐ
var array: Array<Array<Bool>> //๊ณต์ฐ์ฅ ์ข์
//MARK: - Initializer
init(_ R: Int, _ C: Int) {
self.R = R
self.C = C
self.array = Array(repeating: Array(repeating: false, count: self.C + 10), count: self.R + 10)
}
}
//MARK: - Functions
func solution() -> Void {
//MARK: - input
guard let input = readLine()?.components(separatedBy: " ") else { return }
guard let K = Int(readLine() ?? "0") else { return }
let R = input.map { Int($0) }[0] ?? 0
let C = input.map { Int($0) }[1] ?? 0
var seat: Seat = Seat(R, C)
var seatX: Int = 1
var seatY: Int = seat.C
for i in 0...(seat.R + 1) {
seat.array[0][i] = true
seat.array[seat.C + 1][i] = true
}
for i in 1...seat.C {
seat.array[i][0] = true
seat.array[i][seat.R + 1] = true
}
//MARK: - process
if K > seat.R * seat.C {
print(0)
} else {
var x: Int = 1
var y: Int = seat.C
var seatCount: Int = 1
while seatCount < K {
//์
for i in stride(from: y, through: 1, by: -1) {
if seatCount >= K {
break
}
if !seat.array[i - 1][x] {
seat.array[i][x] = true
seatCount += 1
seatY -= 1
} else {
y = i
break
}
}
if seatCount >= K {
break
}
//์ค๋ฅธ์ชฝ
for i in x...seat.R {
if seatCount >= K {
break
}
if !seat.array[y][i + 1] {
seat.array[y][i] = true
seatCount += 1
seatX += 1
} else {
x = i
break
}
}
if seatCount >= K {
break
}
//์๋
for i in y...seat.C {
if seatCount >= K {
break
}
if !seat.array[i + 1][x] {
seat.array[i][x] = true
seatCount += 1
seatY += 1
} else {
y = i
break
}
}
if seatCount >= K {
break
}
//์ผ์ชฝ
for i in stride(from: x, through: 1, by: -1) {
if seatCount >= K {
break
}
if !seat.array[y][i - 1] {
seat.array[y][i] = true
seatCount += 1
seatX -= 1
} else {
x = i
break
}
}
if seatCount >= K {
break
}
}
//MARK: - output
print("\(seatX) \((seat.C - seatY + 1))")
}
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Brute-Force Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
baseBall game (0) | 2022.02.20 |
---|---|
tetris (0) | 2022.02.19 |
bingo (0) | 2022.02.15 |
ํ๋ ฌ ๋ค์ง๊ธฐ (0) | 2022.01.29 |
ํ๋ ฌ ๋ค์ง๊ธฐ 2 (0) | 2022.01.29 |