C언어
아이디는 문자이므로 char 배열을 쓴다.
아이디의 길이는 50자를 넘지 않는다고 했으므로 char 배열의 크기는 50이다.
입출력에 사용되는 서식문자는 %s를 사용한다.
여기서 주의해야할 점은 C언어의 경우 '삼중자' 라는 것이 있다는 점이다.
삼중자를 모른다면 아래 더보기 버튼을 클릭해서 접은글을 확인해보도록...
삼중자에 대한 자세한 설명은 아래 링크에서 확인할 수 있다.
https://learn.microsoft.com/ko-kr/cpp/c-language/trigraphs?view=msvc-170
위 링크의 내용을 요약하자면 다음과 같다.
삼중자는 컴파일러가 해당 문장 부호 문자로 대체하는 세 문자(두 개의 연속된 물음표로 시작)의 시퀀스이다.
삼중자 시퀀스
아래의 삼중자는 컴파일 되면 해당 문장 부호 문자로 바뀐다.
삼중자 | 문장 부호 문자 |
??= | # |
??( | [ |
??/ | \ |
??) | ] |
??' | ^ |
??< | { |
??! | | |
??> | } |
??- | ~ |
삼중자가 변환되지 않게 하기 위해서는
첫번째 물음표와 두번째 물음표 사이에 이스케이프문자( \ )를 넣어주면 된다.
printf("What??!\n");
위의 코드의 출력 결과는 아래와 같다.
What|
"What??!" 이라는 문자열을 출력하고 싶다면
이스케이프 문자를 활용해서 아래와 같이 코드를 작성하면 된다.
printf("What?\?!\n");
이제 C언어 코드를 설명해보겠다.
출력할 때 아이디 뒤에 "??!"를 붙여서 출력해야하는데,
printf("%s??!", id);
를 사용하면 "??!" 부분이 삼중자로 인식된다.
따라서 joonas를 입력했을 때 출력 결과가 joonas|
로 나온다.
??!
는 |
로 변환되는 삼중자이기 때문이다.
#include <stdio.h>
int main(void) {
char id[50]; // 1. 크기가 50인 char형 배열 선언
scanf("%s", id); // 2. 입력받은 문자열을 id에 저장
printf("%s?\?!", id); // 3. 입력받은 id와 "??!"를 붙여서 출력
// (문자열을 출력하므로 서식문자는 %s 사용)
// ("??!"는 삼중자이므로 물음표 사이에 이스케이프문자 삽입)
return 0;
}
이 문제는 C++로 풀면 삼중자를 고려하지 않으면서 더욱 간단하게 풀 수 있다.
C++ 17부터 삼중자가 제거되었기 때문이다.
C++
#include <iostream>
#include <string>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
string id; // 1. 문자열을 저장하는 변수 선언
cin >> id; // 2. 입력받은 문자열을 id에 저장
cout << id << "??!"; // 3. 입력받은 id와 "??!"를 붙여서 출력
return 0;
}
참고)
C++ 풀이에서 ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
을 적는 이유
: 이후 게시글에서 다룰 예정
'PS > 백준' 카테고리의 다른 글
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 [C] (0) | 2023.01.02 |
---|---|
[백준] 18108번: 1998년생인 내가 태국에서는 2541년생?! [C] (0) | 2022.12.30 |
[백준] 10869번: 사칙연산 [C] (1) | 2022.12.29 |
[백준] 1008번 A/B [C] (0) | 2022.12.28 |
[백준] 10998번 A×B [C] (0) | 2022.12.28 |