하이루.
실버 1 문제이다.

문제를 이해하고 입출력을 분석하는데까지약 30분이 소요 됐었다;;
나만 이런 건가....
문제가 처음엔 이해하기 어려웠음.

1중 if가 아닌 3중 if문에 break를 하면 2중 if문만 빠져 나오는지
아니면 for문 자체를 빠져 나오는 건지 헷갈려서 검색 하다가
원하는 답을 찾지 못 함.
그래서 charGPT한테 물어봤는데 내가 이해를 못 한 건지
얘가 이상하게 답변을 한 건지 모르겠어서 그냥 코드 간단하게 짜서
돌려봄.

이제서야 이해함.
gpt 왜 저래;;;
하.. 무튼 그렇게 많은 고난과 역경 끝에
출력 값이 원하는 대로 나타나게 되었는데....

아니.. 출력값이 잘 나오는데 왜 틀렸다고 나오는 거지...

일단 12시가 지나기 전에 잔디를 만들어 줘야 하기에
구글링 해서 파이썬으로 작성한 사람의 코드를 올렸음.
아니 그래서...
왜 틀렸다고 나오는 거지?
출력은 같은데.. 시간 초과도 아니고...
일단 나의 코드를 보여주겠다.
다소 좀 비효율적일 수도 있다.
주석은 거의 끝물에 대충 복붙했는데
수정을 하지 않아 이상할 수도 있다는 점을 염려해 두길 바란다.
#include<stdio.h>
#include<string.h>
int main(void) {
int N, col, num[26][2] = { 0 }, bk = 5678, countA = 0, count = 0, R = 0;
char word[100][50] = { 0 };
int C = 0;
scanf("%d", &N); // 단어 개수 입력 받기.
for (int i = 0; i < N; i++) { // 2차원 배열에 단어 입력 받기
scanf("%s", word[i]);
}
col = strlen(word);
for (int i = 1; i < N; i++) {
for (int j = 0; j < col; j++) {
if (word[C][j] != word[i][j]) { // i행 j열과 i + 1행과 j행 비교하고 같지 않으면
for (int k = -1; k <= R; k++) {
if (num[k + 1][0] == word[C][j]) {// 이미 바뀐 알파벳이랑 동일한 값인지 확인
if (num[k + 1][1] != word[i][j]) { // 동일한 알파벳으로 바뀌지 않았다면
bk = 1234;
break;
}
}
else if (num[k + 1][0] != word[C][j]) {
if (num[k + 1][1] == word[i][j]) { // 동일한 알파벳으로 바뀌지 않았다면
bk = 1234;
break;
}
}
}
if (bk == 1234) {
break;
}
num[R][0] = word[C][j]; // k행에 바뀔 알파벳 저장
num[R][1] = word[i][j]; // 1열에 바뀐 알파벳 저장
R++;
}
else if (word[C][j] == word[i][j]) { // i행 j열과 i + 1행과 j행 비교하고 같다면
for (int k = -1; k <= R; k++) {
if (num[k + 1][0] == word[C][j]) {// 이미 바뀐 알파벳이랑 동일한 값인지 확인
if (num[k + 1][1] != word[i][j]) { // 동일한 알파벳으로 바뀌지 않았다면
bk = 1234;
break;
}
}
else if (num[k + 1][0] != word[C][j]) {
if (num[k + 1][1] == word[i][j]) { // 동일한 알파벳으로 바뀌지 않았다면
bk = 1234;
break;
}
}
}
if (bk == 1234) {
break;
}
num[R][0] = word[C][j]; // 값을 저장
num[R][1] = word[i][j]; // 안 바뀐 알파벳 저장
R++;
}
countA++; // 열은 문제 없어서 증가.
}
if (countA == col) {
count++; // 비슷한 단어 순서쌍 찾음
countA = 0;
for (int p = 0; p <= R; p++) {
for (int o = 0; o < 2; o++) {
num[p][o] = 0; // 배열 초기화
}
}
R = 0;
}
// 다음 행부터 비교
if (bk == 1234) {
bk = 5678;
countA = 0;
for (int p = 0; p <= R; p++) {
for (int o = 0; o < 2; o++) {
num[p][o] = 0; // 배열 초기화
}
}
R = 0;
}
if (i == N - 1) {
C++;
i = C;
}
}
printf("%d\n", count);
return 0;
}
와... 정말 지저분 하죠..?
근데 정말 최선을 다했어요.....
결국 출력은 같게 나오는데 무엇이 문제일까요..?
혹시 아시는 분은 댓글을 부탁합니다...ㅠㅠㅠㅠㅠㅠㅠㅠ