Swift Data Structure And Algorithm/Simulation

ํšŒ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜

youngjaeLee1026 2022. 4. 18. 20:16

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-18 20 03 02

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-18 20 03 13

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

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-18 20 03 39

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

  • d๊ฐ€ 1์ธ ๊ฒฝ์šฐ, ์ •๋ฐฉํ–ฅ d๊ฐ€ 2์ธ ๊ฒฝ์šฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์—ด์˜ ์›์†Œ์— ๋Œ€ํ•ด ์œ„์น˜(index)๋ฅผ ํšŒ์ „ํ•ด์•ผ ํ•จ
  • ์—ฌ๊ธฐ์„œ x์˜ ์œ„์น˜๋ฅผ 0๋ฒˆ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•ด์„œ ๊ณ„์†ํ•ด์„œ ํšŒ์ „ํ•œ ๊ฒฐ๊ณผ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ๋‹ค์Œ ํšŒ์ „์„ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ,
  • x์˜ ์œ„์น˜๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•˜๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•จ
  • ๋˜, y์˜ ์ž…๋ ฅ ๋ฒ”์œ„๊ฐ€ 100์ดํ•˜ ์ด๋ฏ€๋กœ n์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋‹ค์‹œ y์— ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์ฃผ๊ธฐ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ์Œ
  • ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ์ •๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ์—๋Š” x + y๊ฐ€ n๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ, ๋ฐฐ์—ด์˜ ์˜ค๋ฅธ์ชฝ ๋์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ n์„ ๋‹ค์‹œ ๋นผ์ฃผ๊ณ , ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ๋งŒํผ ํšŒ์ „ํ•˜๋ฉด ๋˜๊ณ ,
  • ์—ญ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ์—๋Š” x - y ๊ฐ€ 0๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์™ผ์ชฝ ๋์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ n์„ ๋”ํ•ด์ฃผ๊ณ , ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ๋งŒํผ ํšŒ์ „ํ•˜๋ฉด ๋จ
  • ๋”ฐ๋ผ์„œ ๊ฐ q๊ฐœ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํšŒ์ „์€ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

5. ์ „์ฒด ์ฝ”๋“œ

//MARK: - ํšŒ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜

//MARK: - Framework
import Foundation

//MARK: - Function
func solution() -> Void {
    //MARK: - Input
    guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
    let n: Int = input.map { Int($0) }[0] ?? 0
    let q: Int = input.map { Int($0) }[1] ?? 0
    
    guard let inputA: [String] = readLine()?.components(separatedBy: " ") else { return }
    let a: [Int] = inputA.map { Int($0) ?? 0 }
    var x: Int = 0
    var answer: String = ""
    
    
    //MARK: - Process & Output
    for _ in 0..<q {
        guard let inputData: [String] = readLine()?.components(separatedBy: " ") else { return }
        let d: Int = inputData.map { Int($0) }[0] ?? 0
        var y: Int = inputData.map { Int($0) }[1] ?? 0
        y = y >= n ? y % n : y
        
        switch d {
        case 1:
            x = x + y >= n ? x + y - n : x + y
        case 2:
            x = x - y < 0 ? n + (x - y) : x - y
        default:
            break
        }
        
        answer += "\(a[x])\n"
    }
    
    print(answer)
}
solution()

 

์ „์ฒด์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.