본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 11536 : 줄 세우기

반응형

https://www.acmicpc.net/problem/11536

 

11536번: 줄 세우기

이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.

www.acmicpc.net

또 세우기 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

이름 수 n, 증감소상태 stat, 이름 목록을 저장할 vector s를 선언 후 입력받습니다.

📔 풀이과정

s에 대해 for loop를 수행합니다.

stat 이름목록의 상태를 나타냅니다. -1인 경우 내림차순이며, 0은 아무것도 아닌 상태, 1은 오름차순입니다.

크게 2경우로 나뉘며 각각 두 경우로 나누어 해결할 수 있습니다.

1. 이전 이름이 다음 이름보다 작은 경우 : 이 경우는 오름차순인 경우와 아무것도 아닌 경우로 나뉩니다.

   아무것도 아닌 경우는 이전에 stat이 -1이며 현재 증가했으므로 stat = 0이 됩니다.

2. 이전 이름이 다음 이름보다 큰 경우 : 내림차순인 경우, 아무것도 아닌 경우로 나뉩니다.

    아무것도 아닌 경우는 이전에 stat이 1이며 현재 감소했으므로 stat = 0이 됩니다.

📔 정답출력

stat의 조건에 따라 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int n, stat = 2;
vector <string> s;
int main(){
  cin >> n;
  s.resize(n);
  for(int i = 0; i < n; i++) cin >> s[i];
  for(int i = 1; i < n; i++) {
    if(s[i-1] < s[i]) {
      if(stat == -1) stat = 0;
      else if(stat == 2) stat = 1;
    }
    else {
      if(stat == 1) stat = 0;
      else if(stat == 2) stat = -1;
    }
  }
  if(stat == -1) cout << "DECREASING";
  else if(stat == 0) cout << "NEITHER";
  else cout << "INCREASING";
}