1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ C, R ๊ฐ๊ฐ 20์ด๋ฏ๋ก, ์์ ํ์์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ๋ฌด๋ฐฉํ๋ค๊ณ ํ๋จํจ
- ํ ํธ๋ฆฌ์ค ๋งต์ ์์์ ์๋๋ก ํ์ํ๋ฉด์ 0์ ๊ฐ์๊ฐ 4๊ฐ ์ด์์ธ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ ํด๋น ์ด index๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํจ
- 2๋ฒ์์ ์ ์ฅํ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 0์ธ ๊ฒฝ์ฐ, 4 x 1 ํ ํธ๋ฆฌ์ค๊ฐ ๋งต์ ๋ฒ์ด๋ ๊ฒฝ์ฐ ์ด๋ฏ๋ก ๊ฒ์ ์ค๋ฒ(X = 0, Y = 0)
- ๊ฒ์ ์ค๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ 2๋ฒ์ index ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์๋ ์ด index๋ฅผ ๊ธฐ์ค์ผ๋ก 4 x 1 ํ ํธ๋ฆฌ์ค๋ฅผ ๋์๋ณด๊ณ , ๋ชจ๋ ์์๊ฐ 1์ธ ํ์ index๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํจ
- ํด๋น ๋ฐฐ์ด์ ์ต๋๊ฐ๊ณผ ๊ทธ ๋์ index๋ฅผ ๊ฐ๊ฐ Y์ X์ ์ ์ฅํจ. ๋ชจ๋ 0์ธ ๊ฒฝ์ฐ๋ ์์ฑ๋ ํ์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฏ๋ก X = 0, Y = 0
- X์ Y๋ฅผ ์ฌ์ด์ ๊ณต๋ฐฑ์ ๋๊ณ ์ถ๋ ฅํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
5. ์ ์ฒด ์ฝ๋
//
// main.swift
// Tetris
//
// Created by ์ด์์ฌ on 2022/02/19.
//MARK: - Tetris
//MARK: - Frameworks
import Foundation
//MARK: - Types
struct Tetris {
var C: Int
var R: Int
var X: Int
var Y: Int
var data: Array<Array<Int>>
//MARK: - Initializer
init(_ C: Int, _ R: Int) {
self.C = C
self.R = R
self.X = 0
self.Y = 0
self.data = []
}
}
//MARK: - Functions
func getCompleteCount(_ data: Array<Array<Int>>, _ bottom: Int, _ R: Int, _ C: Int, _ currentX: Int) -> Int {
var result: Int = 0
var tempTetris: Array<Array<Int>> = []
for datum in data {
tempTetris.append(datum)
}
for i in stride(from: bottom, to: bottom - 4, by: -1) {
tempTetris[i][currentX] = 1
}
for i in 0..<R {
var numberOneCount: Int = 0
for j in 0..<C {
numberOneCount += tempTetris[i][j] == 1 ? 1 : 0
}
result += numberOneCount == C ? 1 : 0
}
return result
}
func solution() -> Void {
//MARK: - input
guard let inputMapSize = readLine()?.components(separatedBy: " ") else { return }
let C: Int = inputMapSize.map { Int($0) ?? 0 }[0]
let R: Int = inputMapSize.map { Int($0) ?? 0 }[1]
var tetris: Tetris = Tetris(C, R)
var candidateX: Array<Int> = []
var candidateY: Array<Int> = Array(repeating: 0, count: C)
for _ in 0..<tetris.R {
guard let inputTetrisData = readLine()?.components(separatedBy: " ") else { return }
tetris.data.append(inputTetrisData.map { Int($0) ?? 0 })
}
//MARK: - process
for i in 0..<C {
var zeroCount: Int = 0
for j in 0..<R {
if tetris.data[j][i] == 1 {
break
}
zeroCount += 1
}
if zeroCount >= 4 {
candidateX.append(i)
}
}
if candidateX.count == 0 {
tetris.X = 0
tetris.Y = 0
} else {
for x in candidateX {
var bottom: Int = 3
for i in bottom..<R {
if tetris.data[i][x] == 0 {
bottom = i
} else {
break
}
}
candidateY[x] = getCompleteCount(tetris.data, bottom, tetris.R, tetris.C, x)
}
for i in 0..<C {
if candidateY[i] == 0 {
continue
}
if tetris.Y < candidateY[i] {
tetris.Y = candidateY[i]
tetris.X = i
}
}
}
//MARK: - output
print("\(tetris.X + 1) \(tetris.Y)")
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Brute-Force Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
seat (0) | 2022.02.20 |
---|---|
baseBall game (0) | 2022.02.20 |
bingo (0) | 2022.02.15 |
ํ๋ ฌ ๋ค์ง๊ธฐ (0) | 2022.01.29 |
ํ๋ ฌ ๋ค์ง๊ธฐ 2 (0) | 2022.01.29 |