Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SageMaker
- fcm
- lambda
- serverless
- Validation
- 병목
- rds
- CHECK
- amazonqcli
- terraform
- aws
- kubernetes
- sns
- Lamda
- IaC
- cloudwatch
Archives
- Today
- Total
잡다한 IT 지식
백준 - 달팽이 리스트(Kotlin) 본문
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
https://github.com/ROUTINE-STUDY/Algorithm
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
GitHub - ROUTINE-STUDY/Algorithm: 초보 알고리즘 스터디 / 누구나 참여 가능
초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.
github.com
문의는 댓글 바람.
문제 출처 :https://www.acmicpc.net/problem/17827
[문제 설명]
간단한 구현 문제. 단방향 사이클이 있는 그래프의 k번째 요소를 구하시오.
[접근 방법]
일정 주기로 사이클을 계속 돌기 때문에, 주기로 이동 횟수를 나누면 됨.
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
// 입력
val (N,M,V) = readLine().split(" ").map {it.toInt()}
val graph = readLine().split(" ").map { it.toInt() }.toIntArray()
val sb = StringBuilder()
repeat(M) {
val c = readLine().toInt()
// if : c가 그래프 크기보다 작으면, 해당하는 인덱스를 반환하면 됨.
// else : c가 그래프 크기보다 크면, v~N까지 반복해서 도는 그래프가 됨.
if (c <= N-1) {
sb.append(graph[c])
} else {
// 남은 이동 횟수를 사이클로 나눈 나머지가 사이클에서 위치가 됨.
// graph의 v-1이 사이클의 시작점이므로 v-1을 더해줌.
val idx = (c-V+1)%(N-V+1)+V-1
sb.append(graph[idx])
}
sb.append("\n")
}
println(sb)
}
시간복잡도는 StringBuilder의 append가 O(1)이므로 전체는 O(M)이 될 듯하다.
'알고리즘 문제 풀이 > 구현' 카테고리의 다른 글
백준 - 추월(Kotlin) (0) | 2022.02.24 |
---|---|
백준 - 맞았는데 왜 틀리죠?(Java, Kotlin) (0) | 2022.02.21 |
백준 - 물 주기(Kotlin) (0) | 2022.02.06 |
백준 - 기상캐스터 (0) | 2022.01.30 |
백준 - 경비원 (0) | 2022.01.17 |