Swift Data Structure And Algorithm/Brute-Force Algorithm

tetris

youngjaeLee1026 2022. 2. 19. 22:42

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-19 22 33 31

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-19 22 33 38

3. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-19 22 33 42

4. ๋ฌธ์ œ ์„ค๊ณ„

  1. ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ C, R ๊ฐ๊ฐ 20์ด๋ฏ€๋กœ, ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋ฌด๋ฐฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•จ
  2. ํ…ŒํŠธ๋ฆฌ์Šค ๋งต์„ ์œ„์—์„œ ์•„๋ž˜๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ 0์˜ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ์—ด index๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•จ
  3. 2๋ฒˆ์—์„œ ์ €์žฅํ•œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ, 4 x 1 ํ…ŒํŠธ๋ฆฌ์Šค๊ฐ€ ๋งต์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ์ด๋ฏ€๋กœ ๊ฒŒ์ž„ ์˜ค๋ฒ„(X = 0, Y = 0)
  4. ๊ฒŒ์ž„ ์˜ค๋ฒ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ์œ„ 2๋ฒˆ์˜ index ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์— ์žˆ๋Š” ์—ด index๋ฅผ ๊ธฐ์ค€์œผ๋กœ 4 x 1 ํ…ŒํŠธ๋ฆฌ์Šค๋ฅผ ๋†“์•„๋ณด๊ณ , ๋ชจ๋“  ์›์†Œ๊ฐ€ 1์ธ ํ–‰์˜ index๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•จ
  5. ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์ตœ๋Œ€๊ฐ’๊ณผ ๊ทธ ๋•Œ์˜ index๋ฅผ ๊ฐ๊ฐ Y์™€ X์— ์ €์žฅํ•จ. ๋ชจ๋‘ 0์ธ ๊ฒฝ์šฐ๋Š” ์™„์„ฑ๋œ ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ ์ด๋ฏ€๋กœ X = 0, Y = 0
  6. 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