๋ฌธ์ :
https://www.acmicpc.net/problem/2529
๋ถ์ :
ํผ์์ ํ์ง ๋ชปํ๋ค .. ใ
๋ถ๋ฑํธ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ค๋ณต ์๋ ์กฐํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
๊ทธ๋ฌํ ์กฐํฉ๋ค ์ค ์ต๋ ๊ฐ, ์ต์ ๊ฐ์ ๊ตฌํ๋ ๊ฒ ๋ต์ด์๋ค !
์ฐ์ ๋ถ๋ฑํธ ๊ฐ์ + 1๊ฐ๋งํผ์ ์ซ์๋ฅผ ์ฌ์ฉํ๋ค. ์กฐ๊ฑด ๋ง์กฑ์ answer ๋ฐฐ์ด์ ๋ด๋๋ค.
๊ทธ๋ฆฌ๊ณ for ๋ฌธ 0 ~ 9 10๊ฐ์ ์ซ์์ ๋ํด ์ฒซ๋ฒ์งธ ์ซ์์ผ ๊ฒฝ์ฐ๋ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ์ฒดํฌํ์ง ์๊ณ ๋ฐ๋ก ์ซ์๋ฅผ ๋ฃ๋๋ค.
๊ทธ ๋ค์ index๊ฐ 1์ด์์ผ๋ ๋ถํฐ๋ ์ฒซ๋ฒ์งธ ์ซ์, ์ฒซ๋ฒ์งธ ๋ถ๋ฑํธ, ๋๋ฒ์งธ ์ซ์ 3๊ฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ํด signCheck ํจ์๋ฅผ ๊ฑฐ์น๋ค.
< ๊ธฐํธ์ผ๋ num2๊ฐ ๋ ์ปค์ผ ํ๊ณ , > ๊ธฐํธ์ผ๋ num1์ด ๋ ์ปค์ผ ํ๋ค.
swift์์ character.asciiValue์ ์์คํค ๊ฐ์ ์ป์ ์ ์๋ค ์ฌ๊ธฐ์ 0 ์์คํค ๊ฐ์ธ 48๋งํผ ๋นผ์ฃผ์ด intํ์ผ๋ก ๋ง๋ค์ด ์ฃผ์๋ค.
์๋ฅผ ๋ค์ด
2
< >
์ ๊ฐ์ด input์ด ๋ค์ด์์๋
0 < 1 ๊น์ง ์ ๋ ฅ ๋ฐ์ ์ํ๋ผ๊ณ ํด๋ณด์
๋ค์ backtracking ์ฌ๊ท ํจ์๋ฅผ ํตํด index = 2, num1 = 1, num2 = 2์ผ ๊ฒ์ด๋ค. ์ด๋ num1 > num2(2 ~9)๊น์ง ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ์ง ์์ผ๋ฏ๋ก for๋ฌธ์ด ๋๋ ๊ฒ์ด๊ณ num1 = 1 ์ธ ๊ฒฝ์ฐ๋ก ๋์์ boolArr[1] ์ ๊ฐ์ false(์ ํ ์ํ ๊ฐ)์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค,
๋ค์ for๋ฌธ์ผ๋ก num1 ๊ฐ์ 2๊ฐ ๋ ๊ฒ์ด๋ค.
answer์๋ ๋ถ๋ฑํธ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ string๋ค๋ง ๋ค์ด ์๊ฒ ๋ ๊ฒ์ด๊ณ , ๋ง์ง๋ง์ sortํจ์๋ฅผ ํตํด ์ ๋ ฌ ํด์ค ๋ค, max ๊ฐ๊ณผ min๊ฐ์ ์ถ๋ ฅํด์ค๋ค.
swift ์ฝ๋ :
//
// main.swift
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/03/31.
//
import Foundation
var n = Int(readLine()!)!
var signArr: [String] = readLine()!.split(separator: " ").map { String($0) }
var boolArr:[Bool] = Array(repeating: false, count: 10)
var answer: [String] = []
func signCheck(_ num1: Character, _ num2: Int, _ sign: String) -> Bool {
if(sign == "<") {
if(num1.asciiValue! - 48 > num2) { return false }
}else {
if(num1.asciiValue! - 48 < num2) { return false }
}
return true
}
func backTracking_sign(_ index: Int, _ s: String){
if(index == n+1) {
answer.append(s)
return
}
for i in 0...9 {
if(boolArr[i]) { continue } // ์ด๋ฏธ ์ฌ์ฉํ ์ซ์
if(index == 0){
boolArr[i] = true
backTracking_sign(index+1, "\(s)\(i)") // ๋ค๋ฆ ์๋ฆฌ, ๋ค์ ์ซ์
boolArr[i] = false
}else {
let num1 = s[s.index(s.startIndex, offsetBy: index - 1)]
let num2 = i
if(signCheck( num1, num2, signArr[index-1])) {
boolArr[i] = true
backTracking_sign(index+1, "\(s)\(i)") // ๋ค๋ฆ ์๋ฆฌ, ๋ค์ ์ซ์
boolArr[i] = false
}
}
}
}
backTracking_sign(0, "")
answer.sort()
print(answer.last!) // max ๊ฐ
print(answer.first!) // min ๊ฐ
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] Swift 20361 ์ผ์ฐ๋ ์ผ๋ฐ์๊พผ implementation (0) | 2022.04.12 |
---|---|
[๋ฐฑ์ค] Swift 9466 ํ ํ๋ก์ ํธ DFS (0) | 2022.04.12 |
[๋ฐฑ์ค] Swift 1300 k๋ฒ์งธ ์ BS(Bineary Search) (0) | 2022.03.31 |
[๋ฐฑ์ค] Swift 1806 ๋ถ๋ถํฉ ํฌํฌ์ธํฐ (0) | 2022.03.29 |
[๋ฐฑ์ค] Swift 2468 ์์ ์์ญ BFS (0) | 2022.03.11 |
๋๊ธ