C.C++

백준10926번 ??!(C/C++)

흔들어먹는공대생 2023. 1. 31. 00:20

 

1. 10926번 ??!

문제

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

 

입력

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

 

출력

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

 

예제 입력 1

joonas

 

예제 출력 1

joonas??!

 

예제 입력 2

baekjoon

 

예제 출력 2

baekjoon??!

 


소스코드

#include<stdio.h>

int main(){
    char id[51];
    scanf("%s", id);
    printf("%s?\?!",id);
    return 0 ;
}
 

문제풀이 / 참고

입력받고 뒤에 ??! 붙여서 출력하면 됨

 

처음은 이렇게 풀었는데 2가지 문제가 있음. (정답처리되긴 함)

#include<stdio.h>

int main(){
    char id[50];
    scanf("%s", id);
    printf("%s??!",id);
    return 0 ;
}
 
  1. char id[50]

아이디의 길이는 50자를 넘지 않는다고 함 이때 id[50]을 생각했지만

마지막에 NULL(='\0') 포함하여 50이 아닌 51로 설정해야함.

 

 

2. 삼중자

 

위의 코드는 맞다고 나오지만 오류가 나옴

 

trigraph를 찾아보니 삼중자라고 나온다 .

C언어에서는 전처리기보다 우선하는 치환문자셋이 존재하는데 이게 삼중자라고 한다.

일부 언어권에서 c언어이 문자셋을 받아들이지 못해 삼중자를 사용하게 되었다는데.. c언어에서는 총 0가지 삼중자가 존재한다고 한다.

 
삼중자
변경 문자
??=
#
??(
[
??/
\
??)
]
??'
^
??<
{
??!
|
??>
}
??-
~

 

예를 들어 위의 ??!를 출력하려고 printf("??!")를 입력하면 |이 출력되게 된다는 소리이다.

이를 막기위해 중간에 백슬래시를 넣어 치환되는것을 막는다.

#include<stdio.h>

int main(){
    char id[51];
    scanf("%s", id);
    printf("%s?\?!",id);
    return 0 ;
}
 

정답