본문 바로가기
⌨️ Algorithm/C

1/10 [C] 백준 5426번 - 비밀 편지

by Lucy Oh 2022. 1. 24.

<문제>

 

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

 

5426번: 비밀 편지

선영이는 남자친구를 위해 연애 편지를 썼다. 선영이는 편지가 남들에게 읽히는 것을 막기 위해서 편지를 암호화하려고 한다. 먼저, 편지의 내용을 정사각형에 작성한다. 그 다음, 시계방향으로

www.acmicpc.net

첫번째 풀이

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main() {
	int test, num = 0, i,j,k;
	char letter[10000];

	for (scanf("%d", &test);test+1;test--) {

		for (i = 0;;i++) {
			scanf("%c", &letter[i]);
			if (letter[i] == '\n') {
				letter[i] = '\0';
				break;
			}
		}

		num = sqrt(i);

		for (k = 1; k <= num; k++) {
			for (j = num-k; j <= num*num; j+=num) {
				printf("%c", letter[j]);
			}
		}
		printf("\n");

	}
}

 

실행하면 맞게나옴. 근데 찝-찌입. + 백준 50%정도에서 틀림

 

** testcase 실행이 1이 덜나옴. 왜지? 

5입력해도 4번만 실행됨. 결굴 찝찝하게 입력한것보다 한번 더 실행하게 했지만 ;; 답은 당연히 틀리다고함.

-> 정확히는 처음 반복문 실행에서 이전 코드들은 전부 무시하고 printf("/n"); 만 실행됨 왜인지 이유 아직도 못찾음.

 

 

다시 풀어보기 (1/24) -->new!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int getlen(char *s) {
	int i;
	for (i = 0; *s != '\0'; s++,i++);
	return i;
}

int main() {
	int test, num = 0,j,k,n;
	char letter[10001];

	scanf("%d", &test);

	while (test--) {
		
		scanf("%s", letter);

		num = sqrt(getlen(letter));

		for (k = 1; k <= num; k++) {
			for (j = num-k,n=0; n<num; j+=num,n++) {
				printf("%c", letter[j]);
			}
		}

		printf("\n");
	}
}

아예 num을 구하는 코드를 getline으로 아예 원소개수를 구하는 함수를 추가함.

testcase부분도 정상적으로 돌아옴

마지막 출력하는 부분도 더 정확한 반복문으로 고쳐주었음

위 코드 뭐가 틀렸는지 아직 이유 정확히 못찾음. --------------> 이유 찾을 필요 있음.

 

..

댓글