반응형
문제
https://www.acmicpc.net/problem/10811
풀이
[Int](0...n)
으로 바구니들을 초기화 해줍시다.
뒤집는 것을 어떻게 할 수 있을까요?
revered() 메서드를 사용하여 뒤집을 수 있습니다.
reversed는 어떻게 활용할 수 있을까요?
Array의 replaceSubrange 메서드를 사용하여, 풀이할 수 있습니다.
단순히 Array에서 뒤집을 범위를 뒤집어서 넣어주면 되겠죠?
예를 들어 [1, 2, 3, 4, 5] 란 배열이 있는데, 2 부터 4까지를 뒤집고 싶다면..?
[2, 3, 4]에 [4, 3, 2]를 넣어주면 됩니다.
아니면 정해진 범위 내에서 처음 것와 마지막 것을 바꾸고, 처음 + 1과 마지막 - 1 을 바꾸고.. 이를 반복해도 뒤집을 수 있습니다.
1 2 3 4 5
5 2 3 4 1
5 4 3 2 1
과 같이 말이죠!
start 값이 end 값 보다 작을 때 까지 반복하면 되겠네요.
두 가지 방법을 모두 사용해서 풀이해보았습니다.
소스코드
후기
두가지 방법으로 풀이해보았는데, 다양한 풀이 방법을 알면 좋을 것 같습니다.
n이 뒤집을 범위라고 가정하면
swapAt 하는 방법은 $O(n/2) = O(n)$ 만큼의 시간이 걸릴 것 이고,
replaceSubrange는 뒤집는 reversed가 $O(1)$이고, replaceSubrange가 $O(n)$ 이기 때문에, 비슷할 것 같기도하고..
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 11718 그대로 출력하기 (Swift) (0) | 2023.02.22 |
---|---|
[BOJ] 백준 9086 문자열 (Swift) (0) | 2023.02.22 |
[BOJ] 백준 10813 공 바꾸기 (Swift) (0) | 2023.02.22 |
[BOJ] 백준 10810 공 넣기 (Swift) (0) | 2023.02.22 |
[BOJ] 백준 25314 코딩은 체육과목 입니다 (Swift) (0) | 2023.02.22 |