마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍/Baekjoon Online Judge

BOJ 11506번(占쏙옙) 문제 풀이

동동매니저 2019. 1. 28. 12:22

[문제 링크]

 

11506번: 占쏙옙

占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占

www.acmicpc.net


[문제 분석]

문제에 숨겨진 힌트를 찾아서 정답을 추리하는 문제 (BOJ의 대표적인 난제 중 하나!!)


[풀이]

이 문제의 제목이 '占쏙옙'인데요,

이는 (사이트의) 인코딩 오류로 종종 보실 수도 있습니다.

 

이제 본격적인 풀이를 알려드리겠습니다.

먼저, 이 문제의 힌트 부분에서 '占', '쏙', '옙' 부분을 모두 지워보세요. 아래의 문장이 나옵니다.

이문제는예제를채점하지않습니다.

데이터는한개입니다

입력을받을필요는없다

 

여기에서 '데이터는 1개'라는 부분에 주목해주세요. (여기부터가 핵심입니다!!)

'占쏙옙'의 각 문자를 'EUC-KR'로 인코딩 해보세요. (값은 16진수로 표기하였습니다.)

 

占 : EFBF

쏙 : BDEF

옙 : BFBD

 

그리고, 3개의 코드를 하나로 이어 붙이면,

 

EFBFBDEFBFBD

 

위와 같이 나오게 됩니다.

여기에서 무언가 보이시나요?

바로, 'EFBFBD'가 2번 반복된다는 것입니다.

여기에서 'EFBFBD'를 'UTF-8'로 인코딩 해보세요. (여기에서 마법같은 일이 일어나요!!)

 

 

위의 문자가 나오게 됩니다.

조금 전에 '데이터는 1개'라고 언급했는데요,

그것이 바로 '�' 문자입니다.

이 문자 '1개'를 출력하시면 됩니다. (딱 1개만!!)


[보충 설명]

이 문제의 제출 언어를 'Text'로 하신다면, '�' 1개를 입력하시면 됩니다.

만약, 많이 사용되는 C언어로 하시게 된다면, 한 가지 짚어드리고자 합니다.

(C언어를 사용하신다고 해도 puts와 같은 출력 함수로 직접 '�'를 출력하셔도 무방합니다.)

'�' 문자가 1바이트가 아니기 때문에,

char 배열로 저장 후 문자열 형식으로 출력하셔야 합니다. 즉, 0xEF, 0xBF, 0xBD를 나누어서 저장하셔야 합니다.

(저도 처음에 이 점을 몰라서 틀렸죠 ㅠ.ㅠ)

그리고 여기에서 '\0'을 잊지 말아주세요!! (문자열의 끝을 표시해주는 매우 중요한 값이에요!!)


[소스 코드 (Text)]

(BOJ에서 보기 : Text)

 

공유 소스 보기

 

www.acmicpc.net


[소스 코드 (C언어)]

(BOJ에서 보기 : C언어)

 

공유 소스 보기

 

www.acmicpc.net

#include <stdio.h>

int main(void){
	char c[]={0xEF,0xBF,0xBD,0};
	puts(c);
	return 0;
}

만약 틀린 부분이 있다면 지적 부탁드릴게요~! (댓글 환영!!)