부등호
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stack>
#include <algorithm>
int main() {
int num;
scanf("%d", &num);
char bu[10];
for (int i = 0; i < num; i++) {
scanf(" %c", &bu[i]); // 왜 앞을 띄워야 하는가..?
}
int big[10]; // 가장 큰 경우는 9876..
int x = 9;
for (int j = 0; j<=num; j++) {
big[j] = x;
x--;
}
while (1) {//만들어진 big배열을 입력받은 부등호로 확인
int okflag = 0;
for (int i = 0; i < num; i++) {
if (bu[i] == '<') {
if (big[i] > big[i + 1]) {
//printf("hi");
okflag = 1;
break;
}
}
else {
if (big[i] < big[i + 1]) {
okflag = 1;
break;
}
}
}
if (okflag == 0) {//모든 조건을 통과하면 탈출
break;
}
std::prev_permutation(big, big + num + 1); //현재보다 작은 big배열을 확인하기 위해
}
int small[10]; // big과 반대
for (int j = 0; j <=num; j++) {
small[j] = j;
}
while (1) {
int okflag = 0;
for (int i = 0; i < num; i++) {
if (bu[i] == '<') {
if (small[i] > small[i + 1]) {
//printf("hi");
okflag = 1;
break;
}
}
else {
if (small[i] < small[i + 1]) {
okflag = 1;
break;
}
}
}
if (okflag == 0) {
break;
}
std::next_permutation(small, small + num + 1); // 현재보다 큰 배열을 확인
}
//출력
for (int i = 0; i <= num; i++) {
printf("%d", big[i]);
}
printf("\n");
for (int i = 0; i <= num; i++) {
printf("%d", small[i]);
}
return 0;
}
< > 입력이 이상하게 받아져서 시간이 좀 걸렸다.
전지전능하신 Chat gpt의 말씀을 인용하면 다음과 같다.
scanf("%c", &bu[i]);를 사용하면 입력 버퍼에 남아 있는 개행 문자가 bu[0]의 첫 번째 문자로 읽힙니다.
scanf("%c ", &bu[i]);에서 %c 뒤의 공백은 실제 문자를 읽기 전에 입력 버퍼에서 모든 공백 문자(개행 문자 포함)를 소비하는 데 사용됩니다. 그러나 이 공백은 첫 번째 루프에서 bu[0]에 개행 문자가 저장되는 것을 방지하지 못합니다.
또한 문자를 읽는 루프에서 scanf(" %c", &bu[i]);에서 %c 뒤의 공백을 제거하면 나중에 나오는 문자를 읽기 전에 모든 후행 공백 문자(개행 문자 포함)를 소비하여 다음 문자에 개행 문자가 저장되는 것을 방지합니다.
첫번째로 "%c"를 사용하면 < > >..사이의 공백 문자들이 읽혀버림.
두번째로 "%c "를 사용하면 앞서 버퍼에 있는 \n(enter)?가 읽혀서 맨 처음의 문자열에 \n이 저장된다.
따라서 앞선 공백 문자열과 bu[0]앞에 있는 \n을 날려주기 위해서 " %c"가 사용됨.
확인해보자.


10(line feed)와 space(32)가 얽혀 입력된 것을 확인 가능하다.

마찬가지로 line feed가 밀려 입력된것을 확인할 수 있다.

야호