권예진
코딩 공부
권예진
전체 방문자
오늘
어제
  • 분류 전체보기 (57)
    • Git과GitHub (3)
    • 개발상식 (0)
    • Back-End (20)
      • JAVA (3)
      • Spring (2)
      • CI&CD (0)
      • 부스트코스 (15)
    • PS (20)
      • 백준 (20)
    • TIL (0)
    • 회고 (3)
      • 우아한테크코스 (3)
    • 개발 도서 (8)
      • 객체지향의 사실과 오해 (8)
      • 좋은 코드, 나쁜 코드 (0)
    • 일상 (2)
      • 내가 보려고 만든 맥북 꿀팁 (2)
    • etc (1)
      • C (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 부스트코스
  • 단계별로풀어보기
  • github-actions
  • 자바
  • ps
  • github
  • 맥북
  • 스프링
  • 우아한테크코스5기
  • 우아한테크코스
  • git
  • 스프링부트
  • 우테코5기
  • C언어
  • 객체지향의사실과오해
  • 백준
  • 윤성우의열혈C프로그래밍
  • 백엔드
  • 독서
  • 프로젝트세팅
  • Jacoco
  • 우테코

최근 댓글

최근 글

hELLO · Designed By 정상우.
권예진

코딩 공부

[백준] 10926번: ??! [C / C++]
PS/백준

[백준] 10926번: ??! [C / C++]

2022. 12. 30. 23:55
반응형
 

10926번: ??!

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

www.acmicpc.net

 

C언어

아이디는 문자이므로 char 배열을 쓴다.

아이디의 길이는 50자를 넘지 않는다고 했으므로 char 배열의 크기는 50이다.

입출력에 사용되는 서식문자는 %s를 사용한다.

 

여기서 주의해야할 점은 C언어의 경우 '삼중자' 라는 것이 있다는 점이다.

삼중자를 모른다면 아래 더보기 버튼을 클릭해서 접은글을 확인해보도록...

더보기

삼중자에 대한 자세한 설명은 아래 링크에서 확인할 수 있다.

https://learn.microsoft.com/ko-kr/cpp/c-language/trigraphs?view=msvc-170 

 

삼중자

자세한 정보: 삼중자

learn.microsoft.com

위 링크의 내용을 요약하자면 다음과 같다.

 

삼중자는 컴파일러가 해당 문장 부호 문자로 대체하는 세 문자(두 개의 연속된 물음표로 시작)의 시퀀스이다.

 

삼중자 시퀀스

아래의 삼중자는 컴파일 되면 해당 문장 부호 문자로 바뀐다.

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

 

삼중자가 변환되지 않게 하기 위해서는 

첫번째 물음표와 두번째 물음표 사이에 이스케이프문자( \ )를 넣어주면 된다.

 

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
    'PS/백준' 카테고리의 다른 글
    • [백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 [C]
    • [백준] 18108번: 1998년생인 내가 태국에서는 2541년생?! [C]
    • [백준] 10869번: 사칙연산 [C]
    • [백준] 1008번 A/B [C]
    권예진
    권예진

    티스토리툴바