2022. 8. 18. 11:46ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/11536
11536번: 줄 세우기
이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.
www.acmicpc.net
접근 방법 - 기본적인 문자열 비교 문제
백준의 11536번 문제는 문자열 비교에 있어 기본적인 연산이 필요한 문제이다.
해당 문제는, 입력받은 이름들에 있어 어떤 순서로 이루어져 있는지에 대한 정답을 출력해야 한다.
우리가 판별해야 하는 출력값으로는 Increasing(증가), Decreasing(감소), Neither(아무것도 아님), 이 3가지가 있다.
cpp에는 논리 연산자로도 문자열을 비교할 수 있는 간단한 기능이 탑재되어있기 때문에 해당 언어로는 쉽게 해결할 수 있을 것으로 예상된다.
그에 대한 사용은 아래 코드에 있으니, 이 문제의 해결에 어려움을 겪고 있다면 아래를 참고해보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 입력받을 이름들을 저장할 배열(name)을 전역 변수로 선언해둔다.
2) 이름의 개수(n)를 입력받는다.
3) 오름차순과 내림차순 여부를 카운팅할 변수 up, down을 각각 0으로 초기화하여 선언한다.
4) n의 크기만큼 반복문을 실행하여 아래의 연산을 취한다.
- 이름(name)을 하나씩 입력받는다.
- 이전에 입력받은 이름과 사전 상의 위치를 비교하여 up과 down의 값을 변경한다.
만약 현재 입력받은 이름이 이전에 입력받은 이름보다 사전상으로 뒤에 위치한다면, 이는 오름차순이기 때문에 up에 1을 더한다.
다만 현재 입력받은 이름이 이전에 입력받은 이름보다 사전상으로 앞에 위치한다면, 이는 내림차순이기 때문에 down에 1을 더한다.
5) 4)에서 up과 down에 대한 연산이 끝났다면, 아래의 조건에 따라 출력을 수행한다.
- 만일, up이 0이고 down이 0보다 큰 값을 갖고 있다면, 이는 내림차순이다. 이 경우에는 "DECREASING"을 출력한다.
- 반면, down이 0이고 up이 0보다 큰 값을 갖고 있다면, 이는 오름차순이다. 이 경우에는 "INCREASING"을 출력한다.
- 이 2가지 경우 모두 아니라면, 그 어떤 것도 아니다. 이 경우에는 "NEITHER"을 출력한다.
6) 출력이 완료되었다면, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 11536번 코드
string name[21];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
int up = 0, down = 0;
for (int i = 0; i < n; i++) {
cin >> name[i];
if (i != 0) {
if (name[i] > name[i - 1]) {
up++;
}
else if (name[i] < name[i - 1]) {
down++;
}
}
}
if (up == 0 && down > 0) { cout << "DECREASING" << endl; }
else if (down == 0 && up > 0) { cout << "INCREASING" << endl; }
else { cout << "NEITHER" << endl; }
}
제출 결과
(2022.07.02 백준 11536번 문제 제출 결과)
갓 cpp
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 18110번 solved.ac (C++/cpp) (0) | 2022.08.18 |
---|---|
[백준 BOJ] 4134번 다음 소수 (C++/cpp) (0) | 2022.08.18 |
[백준 BOJ] 15873번 공백 없는 A+B (C++/cpp) (0) | 2022.08.18 |
[백준 BOJ] 23968번 알고리즘 수업 - 버블 정렬 1 (C++/cpp) (0) | 2022.08.17 |
[백준 BOJ] 4949번 균형잡힌 세상 (C++/cpp) (0) | 2022.08.17 |