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 중 하나를 출력한다.
입력이 1부터 8까지가 한 번씩만 등장하기 때문에 대충 for 문 돌리면서 숫자가 하나라도 틀리면 바로 mixed가 뜨게 만들면 간단하게 끝날 거라고 생각했다.
#include <stdio.h>
int main(void)
{
int i, a;
for (i = 1; i <= 8; i++)
{
scanf("%d", &a);
if (a != i && a != 9 - i)
{
puts("mixed");
return 0;
}
}
if (a == 8)
{
puts("ascending");
}
else
{
puts("descending");
}
return 0;
}
그냥 1부터 시작하든지 8부터 시작하든지 순서가 안 맞으면 바로 mixed, 8로 끝나면 ascending, 1로 끝나면 descending을 출력하도록 코드를 짰다. 그런데 채점을 돌려보니 틀렸다고 나왔다!?!
뭔가 싶어 생각이란 걸 해봤는데(저 코드는 문제 보자마자 걍 생각 없이 짠 거...) 곰곰이 생각해보니 입력이 1 2 3 5 4 6 7 8
이렇게 들어오면 mixed라고 떠야 하지만 ascending이라고 뜨게 된다.
문제를 파악하고 적당히 땜빵해서 다시 코드를 짰다.
#include <stdio.h>
int main(void)
{
int a, i;
scanf("%d",&a);
if (a == 1)
{
for (i = 2; i <= 8; i++)
{
scanf("%d",&a);
if (a != i)
{
puts("mixed");
return 0;
}
}
puts("ascending");
return 0;
}
else if (a == 8)
{
for (i = 7; i >= 1; i--)
{
scanf("%d",&a);
if (a != i)
{
puts("mixed");
return 0;
}
}
puts("descending");
return 0;
}
puts("mixed");
return 0;
}
땜빵 코드라 뭔가 지저분해서 굉장히 마음에 안 들지만 뭐 채점을 통과했으니...ㅎㅎ
다른 사람이 짠 코드들 보니까 다 배열을 사용했다. 알고리즘 분류가 배열로 되어 있어서 그런가? 쩝... 다른 사람이 짠 코드에서 영감을 받아 깔끔하게 다시 짜보았다. 물론 난 배열을 안 쓰고!
#include <stdio.h>
int main(void)
{
int a, i, b = 0;
for (i = 1; i < 9; i++)
{
scanf("%d",&a);
if (a == i)
{
b++;
}
else if (a == 9 - i)
{
b--;
}
}
if (b == 8)
{
puts("ascending");
}
else if (b == -8)
{
puts("descending");
}
else
{
puts("mixed");
}
return 0;
}
변수 하나 추가로 아까보다 깔끔하니 만족!
'프로그래밍 > C | C++' 카테고리의 다른 글
[백준] 1065번: 한수 (0) | 2019.12.15 |
---|---|
[백준] 4673번: 셀프 넘버 (0) | 2019.10.05 |
[백준] 1546번: 평균 (0) | 2019.09.29 |
[백준] 3052번: 나머지 (0) | 2019.09.14 |
[C] 라그랑주 보간법을 이용한 달팽이 배열 출력 (0) | 2019.07.09 |
삼진 탐색 (Ternary search) (0) | 2019.07.06 |
다양한 피보나치 수열 알고리즘 (0) | 2019.07.04 |
[C++] 포식자-먹이 시뮬레이션 (0) | 2019.06.24 |