*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.
문제
1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓여있다. 각 카드의 위치는 카드 위에 적힌 숫자와 같이 1부터 20까지로 나타낸다.
이제 여러분은 다음과 같은 규칙으로 카드의 위치를 바꾼다. 구간 [a,b] (1 <= a <= b <= 20)이 주어지면 위치 a부터 b까지의 카드를 현재의 역순으로 놓는다.
오름차순으로 한 줄로 놓여있는 20장의 카드에 대해 10개의 구간이 주어지면, 주어진 구간의 순서대로 위의 규칙에 따라 순서를 뒤집는 작업을 연속해서 처리한 뒤 마지막 카드들의 배치를 구하는 프로그램을 작성하시오.
풀이
• 답안 : Python
import sys
input = sys.stdin.readline
cards = [i for i in range(21)] # list(range(21)) 도 가능
for _ in range(10):
a, b = map(int, input().split())
for i in range((b-a+1) // 2):
cards[a+i], cards[b-i] = cards[b-i], cards[a+i]
cards.pop(0)
for j in cards:
print(j, end=' ')
• 답안 : Kotlin (내가 바꿔본 것 / 정확X)
import java.io.*
import java.util.*
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))){
var cards = (0..20).toMutableList()
for(i in 0 until 10) {
var (a, b) = readLine().split(" ").map{ it.toInt() }
for(j in 0 until (b-a+1)/2) {
cards[a+j] = cards[b-j].also { cards[b-j] = cards[a+j] }
}
}
cards.removeAt(0)
for(k in cards) {
print("${k} ")
}
}
- reverse 시키는 방법이 생각이 나지 않아서, 답변을 보고 다시 익히게 되었다.
- 파이썬에서는 swap 방식이 굉장히 쉽다. 하지만 코틀린에서는 파이썬과 같은 방식으로 되지 않아서, 찾아보니 scope 함수를 사용해서 쉽게 구현한다고 한다.
** reverse 로직
→ 인덱스 절반까지만 for문을 돌려서, 앞의 인덱스에는 더해주고 / 뒤의 인덱스에는 빼줘서 서로 swap 시킨다.
*** swap 방법
(1) Python
a, b = b, a
(2) Kotlin
a = b.also { b = a }
'💻 코딩테스트 > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 수들의 합 (투포인터 알고리즘) (0) | 2023.04.28 |
---|---|
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 두 리스트 합치기 (0) | 2023.04.27 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 숫자만 추출 (0) | 2023.04.26 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 회문 문자열 검사 (0) | 2023.04.25 |
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 점수계산 (0) | 2023.04.25 |