Swift Data Structure And Algorithm/Brute-Force Algorithm

seat

youngjaeLee1026 2022. 2. 20. 22:55

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-20 22 47 06

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-20 22 47 10

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

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-02-20 22 47 13

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

  1. ์ „ํ˜•์ ์ธ ๋‹ฌํŒฝ์ด ๋ฐฐ์—ด ๋ฌธ์ œ
  2. ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ 1000์ด๋ฏ€๋กœ O(N^2) ์ฆ‰, ์™„์ „ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ
  3. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ…Œ๋‘๋ฆฌ์— ์—ฌ์œ  ๊ณต๊ฐ„์„ ๋‘์–ด์„œ ๋ฐฐ์—ด index ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์ž…๋ ฅํ•œ K์˜ ๊ฐ’์ด R * C๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ์ขŒ์„์„ ๋ฐฐ์ •๋ฐ›์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•จ.
  4. ๋ฌธ์ œ์—์„œ๋Š” ์™ผ์ชฝ ์•„๋ž˜๊ฐ€ (1, 1)์ด์ง€๋งŒ ์‹ค์ œ ๋ฐฐ์—ด์—์„œ๋Š” ์™ผ์ชฝ ์•„๋ž˜๊ฐ€ (1, 6)์ด๋ฏ€๋กœ (1, 6)๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•จ
  5. ์œ„ ๋ฐฉํ–ฅ ์ด๋™์ธ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์œ„ ์ธ๋ฑ์Šค(y์ถ• ์ด๋™)๊ฐ€ false์ผ ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ์ขŒ์„์— true๋ฅผ ์ค„ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ ์ขŒ์„์—์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถค
  6. ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ ์ด๋™์ธ ๊ฒฝ์šฐ ๋ฐ”๋กœ ๋‹ค์Œ ์ธ๋ฑ์Šค(x์ถ• ์ด๋™)๊ฐ€ false์ผ ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ์ขŒ์„์— true๋ฅผ ์ค„ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ ์ขŒ์„์—์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถค
  7. ์•„๋ž˜ ๋ฐฉํ–ฅ ์ด๋™์ธ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์•„๋ž˜ ์ธ๋ฑ์Šค(y์ถ• ์ด๋™)๊ฐ€ false์ผ ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ์ขŒ์„์— true๋ฅผ ์ค„ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ ์ขŒ์„์—์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถค
  8. ์™ผ์ชฝ ๋ฐฉํ–ฅ ์ด๋™์ธ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์ „ ์ธ๋ฑ์Šค(x์ถ• ์ด๋™)๊ฐ€ false์ผ ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ์ขŒ์„์— true๋ฅผ ์ค„ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ ์ขŒ์„์—์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถค
  9. ์œ„ 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