티스토리 뷰
백준 2947번, 나무조각 문제설명
백준 2947 나무조각 문제는 문제에서 설명한 그대로 배열의 값을 스왑해주면서 배열의 상태를 출력해주는 기초문제입니다. 오늘 문제에서는 swift배열의 특정 위치 값을 스왑할때 사용할 수 있는 swapAt 메서드를 활용해서 문제 풀어보겠습니다.
시간제한은 1초, 메모리제한은 128MB입니다. 문제 설명을 보시면 첫번째 ~ 네번재 배열 값까지 순회하면서 현재 인덱스의 값이 다음 인덱스 값보다 클 경우 스왑하는 과정을 반복합니다. 이후에 [1, 2, 3, 4, 5]의 배열 상태가 되면 연산을 종료하는 문제입니다.
이 과정에서 배열의 I, j 번째 인덱스 값을 스왑할 때 사용할 수 있는 메서드가 swapAt(_:_:)입니다.
swapAt 메서드는 배열에서 접근 할 수 있는 mutating func 메서드로, 해당 메서드의 실행으로 원본 배열의 값은 swap이 된 상태로 변환이 됩니다.
2 1 5 3 4를 입력 했을 경우 반복 연산을 3번 거쳐 [1, 2, 3, 4, 5]의 배열이 되며 그 과정을 출력하면 됩니다. 바로 swift언어와 배열의 swapAt 메서드를 활용해서 문제를 풀어보도록 하겠습니다.
백준 2947번, 나무조각 swift 문제풀이
swapAt을 활용해서 배열 값 스왑하기
입력을 받아 [Int]타입 배열을 반환하는 클로져를 만들었습니다. 그냥 readLine()!.split(separator: " ").map { .... } 의ㅣ 형태로 문자열 처리해줘도 문제 없습니다.
12행) 나무조각의 5개 숫자 값을 입력 받았습니다.
14 ~ 17행) 배열 값이 [1, 2, 3, 4, 5]로 오름차순 정렬이 되기 전가지 앞서 문제에서 설명한 작업을 반복 수행합니다. (0...3).forEach는 1 ~ 4번째 값을 기준으로 다음인덱스와 큰지 작은지 비교하고 스왑하는 반복연산을 수행하기 위한 반복문이죠. 17행에서 보시면 스왑이 필요할때 arr배열의 멤버 메서드, swapAt을 접근해서 스왑을 수행하고 있습니다.
18행) 스왑연산이 되었을 때마다 현재 배열의 상태를 출력해주고 있습니다. 이렇게 배열의 swapAt 메서드를 활용해서 간편하게 배열의 특정 값을 스왑해줄 수 있다는 것이 이번 포스팅의 요지가 되겠습니다.
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
스위프트 DFS 백트래킹 예제, 백준 10974 모든순열 풀이 (0) | 2021.02.14 |
---|---|
swift Set contains 예제, 백준 2941 크로아티아 알파벳 풀이 (0) | 2021.02.13 |
swift언어 reduce 고차함수 예제, 백준 1037 약수 풀이 (0) | 2021.02.11 |
프로그래머스 카카오공채문제, 신규아이디추천 swift 풀이 (0) | 2021.02.07 |
백준 union find 알고리즘, 17171 집합의표현 swift 풀이 (0) | 2021.02.06 |
- Total
- Today
- Yesterday
- Swift 알고리즘
- 백준알고리즘
- 프로그래머스swift
- 프로그래머스
- 스위프트
- Collection
- publisher
- SwiftUI
- swift언어
- 자연어처리
- 컬렉션
- swift 문자열
- uikit
- createML
- 부스트코스
- CoreML
- 백준swift
- 프로토콜
- 알고리즘문제
- ios
- 개발자문서
- swift
- swift 기초
- swift string
- swift문제
- swift reduce
- Protocol
- 알고리즘
- swift알고리즘
- 김프매매
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |