[백준] 디지털 친구 (1985)

문제 설명

백준 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")
    }
}

태그:

카테고리:

업데이트: