문제 출처 : https://www.acmicpc.net/problem/2920
문제
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
알고리즘 분류
풀이
간단한 구현 문제이다.
입력이 오름차순 정렬되어 있는지, 내림차순 정렬되어 있는지, 정렬되어 있지 않은지 검사하면 된다.
우선 input[0]과 input[1]을 비교해서 입력이 오름차순인지, 내림차순인지 정한다.
이후, input[2]부터 마지막까지, 이전의 수와 비교해서 오름차순인데 낮은 값이 나온다면,
내림차순인데 큰 값이 나온다면 mixed를 출력하고 종료하고, 이상 없다면 ascending 나 descending를 출력하면 된다.
사실 그냥 문자열에 1 2 3 4 5 6 7 8 이랑 8 7 6 5 4 3 2 1을 저장해놓고, 입력이 이 두 개와 다르다면 mixed를 출력하면 된다. 하지만 위의 풀이처럼 풀어야 앞으로 맞닥뜨릴 어려운 문제들을 해결할 능력을 기를 수 있기에,
코딩 테스트라면 후자, 공부라면 전자로 풀어보자!
코드
fun main() = with(System.out.bufferedWriter()){
val br = System.`in`.bufferedReader()
val input = br.readLine().split(' ').map{it.toInt()}
var asc = input[0] < input[1]
var pre = input[1]
for(i in 2 until input.size){
//ascending
if(asc){
if(pre > input[i]){
write("mixed")
close()
return
}
}
//descending
else{
if(pre < input[i]){
write("mixed")
close()
return
}
}
pre = input[i]
}
if(asc){
write("ascending")
}
else{
write("descending")
}
close()
}
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 16918 봄버맨 Kotlin (시뮬레이션) (0) | 2021.11.23 |
---|---|
백준 14940 쉬운 최단거리 Kotlin (bfs) (0) | 2021.11.23 |
백준 1540 정사각형의 개수 Kotlin (dp) (0) | 2021.11.21 |
백준 2563 색종이 Kotlin (구현) (0) | 2021.11.20 |
백준 3151 합이 0 Kotlin (투 포인터) (3) | 2021.11.19 |
댓글