씬디의 블로그

[백준] 공 바꾸기 10813 Swift 본문

Algorithm/Baekjoon

[백준] 공 바꾸기 10813 Swift

cyndi 2023. 12. 1. 21:55

문제: https://www.acmicpc.net/problem/10813

 

10813번: 공 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이

www.acmicpc.net

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다.

바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.

도현이는 앞으로 M번 공을 바꾸려고 한다.

도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.

공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오.

 

와 계속 쉬운 문제만 풀다가

짱구를 굴려야만 하는 문제를 만났다

 

처음 작성했던 실패한 코드

func solution10813() {
    let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
    
    var num: [Int] = []
    
    for i in 1...input[0] {
        num.append(i)
        print("num:\(num)")
        
    }
    for _ in 0..<input[1] {
        let exchange = readLine()!.components(separatedBy: " ").map { Int($0)! }
        var C = 0

        C = num[exchange[0]]
        num[exchange[0]] = num[exchange[1]]
        num[exchange[1]] = C
        
        print("num:\(num)")
    }
}

풀리지 않았던 부분

1. 배열의 위치가 아닌 공 번호를 받아와야하는 부분

2. 배열 안에 있는 요소의 위치를 서로 바꿔줘야 하는 부분

-> 변수 C를 하나 추가로 만들어서 세개의 요소를 이리 저리 옮겨다녔는데 이건 아니라고 생각했다

func solution10813() {
    let input = readLine()!.components(separatedBy: " ").map{ Int($0)! }
    let n = input[0], m = input[1]
    var basket = [Int](0...n)
    
    for _ in 0..<m {
        let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
        let i = input[0], j = input[1]
        basket.swapAt(i, j)
    }
    basket[1...].forEach{ print($0, terminator: " ") }
}

1. 배열의 위치가 아닌 공 번호를 받아와야하는 것부터 걸렸다

-> 그래서 basket을 초기화 시켜주어야 했다

2. 배열 안에 있는 요소의 위치를 서로 바꿔줘야 하는 부분

-> 변수 C를 하나 추가로 만들어서 세개의 요소를 이리 저리 옮겨다녔는데 이건 아니라고 생각했다

.swapAt

이 함수를 사용하면 쉽게 서로의 위치를 바꿀 수 있었다

 

 

[.swapAt 함수]

2023.12.01 - [Swift] - [Swift] .swapAt 배열 자리 바꾸기

 

[Swift] .swapAt 배열 자리 바꾸기

Swift 배열 안에서 요소들의 위치를 바꿔야 할 때 .swapAt을 사용한다 var numbers = [2, 6, 4, 8] // swap 6 and 4 numbers.swapAt(1, 2) print(numbers) // [ 2, 4, 6, 8 ] 예제 for _ in 0..

cyndi0330.tistory.com

 

[고차함수 map]

2023.11.30 - [Swift] - [Swift] 고차함수 map

 

[Swift] 고차함수 map

Swift [고차함수 1편 reduce 관련 글] 2023.11.30 - [Swift] - [Swift] 고차함수 reduce [Swift] 고차함수 reduce Swift reduce를 알기 전에 우선 고차함수란 무엇일까 [고차함수 ] 고차함수는 다른 함수를 전달인자로

cyndi0330.tistory.com