[백준] 10926

YUN·2025년 9월 1일

C++

목록 보기
6/79

그냥 라이브러리 버퍼 읽어서 ??! 붙여서 다시 출력하는 문자열 문제이다.

1. C++ 스타일- <string> 사용 (C++ 표준 문자열 헤더)

(1) 풀이

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1;
    cin >> s1;
    s1 += "??!";
    cout << s1;
    
    return 0;
}

string으로 입력 스트림을 받은 다음에

문자열을 이어붙이는 연산자 +를 사용해서 두 문자열을 이어붙여서 출력했다.

이외에도 s.append(s1), s.insert(pos, s1) 을 사용해도 풀이가 가능하다.

// s.append() 사용
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    string s1;
    cin >> s1;
    s1.append("??!");
    cout << s1;
    return 0;
}
// s.insert() 사용
#include <iostream>
#include <string>

using namespace std;

int main() {
    string s1;
    cin >> s1;
    s1.insert(s1.length(), "??!");
    cout << s1 << endl;
    
    
    return 0;
}

2. C 스타일- char[] 사용

(1) C언어에는 문자열 전용 자료형이 존재하지 않는다.

다만, 보통 char 배열 (char[]) 에 문자열을 저장해서 사용한다.

(2) scanf - C 스타일로 문자열 받기

#include <cstdio>

using namespace std;

int main() {
    char a[50];
    scanf("%s", a);
}

위와같이 char 배열을 선언해주고, (문제에서 id의 최대 길이가 50이라했으니 50개 요소를 담을 수 잇는 배열을 선언) 형식지정자를 %s로 해줘야한다.

추가적으로 scanf에는 &(주소 연산자)를 활용해 주소를 인자로 전달해줘야하는데 여기서는 왜 그냥 배열의 이름만 적어줬을까?

배열은 특이하게도, 배열의 이름만 적는 경우, 배열의 주소를 반환한다. 따라서 굳이 &를 해 줄 필요가 없는 것이다.

(3) 풀이

#include <cstdio>

using namespace std;

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

위와같이 해주면된다.

참고로 이 문제는 삼중자(Trigraph Sequence) 관련 문제인데

C++17부터는 삼중자가 무시되므로 고려하지 않아도 되는것 같다.

(자동 비활성화 되어있다고한다.)

삼중자 관련 개념은 https://st-lab.tistory.com/289 해당 링크에 자세히 설명되어있다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글