[백준] 디지털 친구 (1985)
문제 설명
입력 및 출력
» 입력
세 개의 입력 데이터가 주어지며, 각각의 입력 데이터는 한 개의 줄로 이루어져 있다. 각 데이터의 첫째 줄에 두 정수 x, y가 공백을 사이에 두고 주어진다.
» 출력
세 개의 줄에 걸쳐 입력된 순서대로 x, y가 friends면 “friends”, almost friends이면 ”almost friends”, 둘 다 아니면 “nothing” 이라고 출력한다.
제한 사항
0 < x, y < 10100 x, y는 0으로 시작하지 않는다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
123 32331313323213 137 470 123 2223042 |
friends nothing almost friends |
문제 풀이(SWIFT) 1
//
// main.swift
// BOJ1985_SWIFT
//
// Created by choiyoujun on 2022/02/07.
//
func isFriends(_ aSet: inout Set<Int>, _ B: inout [Int]) -> Bool {
var isAlmostFriends = false
for i in 0..<B.count - 1 {
if B[i] < 9 && B[i + 1] > 0 {
B[i] += 1
B[i + 1] -= 1
if aSet == Set<Int>(B) {
isAlmostFriends = true
break
} else {
B[i] -= 1
B[i + 1] += 1
}
}
if i == 0 && B[i] <= 1 { continue }
if B[i] > 0 && B[i + 1] < 9 {
B[i] -= 1
B[i + 1] += 1
if aSet == Set<Int>(B) {
isAlmostFriends = true
break
} else {
B[i] += 1
B[i + 1] -= 1
}
}
}
return isAlmostFriends
}
for _ in 0..<3 {
let AB = readLine()!.split(separator: " ")
var A = String(AB[0]).map { Int(String($0))! }
var B = String(AB[1]).map { Int(String($0))! }
var aSet = Set<Int>(A)
var bSet = Set<Int>(B)
if aSet == bSet {
print("friends")
} else {
let isAlmostFriends = isFriends(&aSet, &B) ? true : isFriends(&bSet, &A)
print(isAlmostFriends ? "almost friends" : "nothing")
}
}