# 문제
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
# 풀이1
코드가 간단한 문제에 비해 길고 복잡한 것 같다.
아이디어가 떠오르면 무조건 그 방식을 고집해 푸는 것 좀 고치고 싶은데... 다방면으로 사고를 열도록 노력해야겠다.
구글링해서 찾아본 다른 방법까지 총 두 개의 방법을 포스팅한다.
우선 첫번째로 풀었던 정답 소스코드부터!
#include <iostream>
using namespace std;
int main(){
int num;
cin >> num;
if(num == 1){
for(int i=2; i<9; i++){
cin >> num;
if(i != num){
cout << "mixed";
break;
}
if(num == 8) cout << "ascending";
}
} else if(num == 8){
for(int i=7; i>0; i--){
cin >> num;
if(i != num){
cout << "mixed";
break;
}
if(num == 1) cout << "descending";
}
} else cout << "mixed";
return 0;
}
우선 입력되는 경우는 1로 시작하거나 (ascending) 8로 시작하거나 (descending), mixed인 경우 세 가지로 나누었다.
그리고 1로 시작되는 경우는 for문을 돌며 정말 ascending인지 확인하고, 아니라면 mixed 처리해주었다.
8로 시작되는 경우에도 마찬가지로 for문을 돌며 정말 descending인지 확인하고, 아니라면 mixed 처리해주었다.
# 풀이2
풀이 1의 경우는 mixed로 빠지는 다양한 경우를 고려해주어야 하는 점이 아쉬웠다.cout << "mixed" 만 세 번...좀 더 좋은 코드를 구글링해보았는데 나 빼고 다 같은 방법으로 풀더라...^^ 울지마배우면되는거지...
#include <iostream>
using namespace std;
int main(){
int num;
int asc = 0;
int desc = 0;
for(int i=0; i<8; i++){
cin >> num;
if(num == i+1) asc++;
else if(num == 8-i) desc++;
}
if(asc == 8) cout << "ascending";
else if(desc == 8) cout << "descending";
else cout << "mixed";
return 0;
}
우선 다들 입력이 어차피 딱 8개만 들어오므로 크기 8의 배열을 선언해 판단해주더라.
하지만 굳이 배열을 쓸 필요가 있나 싶어 해당 풀이에서는 배열 말고 정수 변수를 사용해주었다. 배열을 쓰는 게 더 좋은 이유를 알고 계시다면 댓글로 알려주세요... 오름차순과 내림차순을 판별해줄 변수도 만들어준 후에 for문을 돌며 판별을 시작해준다.
받아온 음을 확인하며 조건문에 해당하는 경우에는 오름차순, 내림차순 판별 변수를 증가!
for문을 빠져나온 후 오름차순 변수가 8이라면 1-8까지 오름차순으로 입력되었다는 의미이므로 "ascending" 출력
내림차순 변수가 8이라면 8-1까지 내림차순으로 입력되었다는 의미이므로 "descending" 출력
두 조건문 모두 해당하지 않는다면 mixed인 경우이므로 "mixed"를 출력해주면 끝이다!
코드가 훨씬 간결하고, 판별을 마지막에 한 번에 해주는 게 훨씬 효율적인 것 같아 보인다.
하지만 입력 크기가 작은 코드라 두 방법 모두 메모리나 수행 시간에서 차이는 없었다.
'백준 > C++' 카테고리의 다른 글
[백준] 10250번: ACM 호텔 | C++ 풀이 (0) | 2023.06.25 |
---|---|
[백준] 8958번: OX퀴즈 | C++ 풀이 (0) | 2023.06.24 |
[백준] 2577번: 숫자의 개수 | C++ 풀이 (0) | 2023.06.22 |
[백준] 24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6 | C++ 풀이 (0) | 2023.06.21 |
[백준] 24266번: 알고리즘 수업 - 알고리즘의 수행 시간 5 | C++ 풀이 (0) | 2023.06.20 |