본문 바로가기

코딩테스트/백준

[C/Python] 문자열

[백준/C++/Python] 문자열 파트 정복: 아스키코드부터 알고리즘까지 핵심 요약

안녕하세요! 오늘은 백준 문자열 단계 문제를 풀며 정리한 핵심 개념들을 공유합니다. 파이썬의 간결함과 C++의 세밀한 제어를 동시에 공부하며 느낀 차이점과 정보처리기사 실기 시험에 나올만한 포인트들을 짚어봤습니다.


1. 문자와 숫자의 다리: 아스키코드 (ASCII)

컴퓨터는 문자를 숫자로 기억합니다. 이 원리를 이해하는 것이 문자열 공부의 시작입니다.

  • 핵심 함수:
    • Python: ord('A') → 65, chr(65) → 'A'
    • C++: 별도 함수 없이 (int)'A'로 형 변환(Casting) 하거나, char 변수에 숫자를 직접 더하고 뺄 수 있습니다.
  • 시험 대비 암기 포인트:
    • 'A' = 65, 'a' = 97 (대소문자 차이는 32)
    • '0' = 48 (문자 '0'을 숫자 0으로 만들려면 '0' - 48 혹은 s[i] - '0' 연산이 필요합니다.)

2. 문자열 뒤집기와 수학적 변환

백준의 '상수' 문제처럼 숫자를 뒤집어 비교할 때 유용한 테크닉입니다.

  • Python: 슬라이싱 s[::-1]이나 "".join(reversed(s))를 사용하여 한 줄로 해결 가능합니다.
  • C++ (수학적 방법): 정보처리기사 실기 단골 로직입니다.
  • C++
     
    while (num > 0) {
        reverse = reverse * 10 + (num % 10); // 일의 자리 추출 후 자릿수 올림
        num /= 10; // 원본 숫자 자릿수 내림
    }
    

3. 공백이 포함된 문자열 입력 (EOF 처리)

단어의 개수를 세거나 그대로 출력하는 문제에서 가장 중요한 부분입니다.

  • Python: sys.stdin.read().split()을 사용하면 모든 공백과 줄바꿈을 무시하고 단어만 리스트로 추출해 줍니다.
  • C++:
    • 단어 단위: while (cin >> s) (공백 기준 자동 분리)
    • 한 줄 전체: getline(cin, s) (공백 포함 읽기)
    • 주의: cin >> s는 첫 단어를 읽는 순간 스트림에서 소모되므로, 루프 조건문 안에서 직접 사용하는 것이 안전합니다.

4. 데이터 맵핑: 다이얼과 알파벳 찾기

특정 문자를 인덱스나 특정 값으로 치환하는 방법입니다.

  • 배열 인덱스 활용: s[i] - 'a'를 하면 'a'는 0, 'b'는 1이 됩니다. 이를 이용해 크기 26짜리 배열에 알파벳 위치나 빈도를 기록할 수 있습니다.
  • Switch-Case (C++): 여러 case를 묶어 처리할 때 break;의 위치가 중요합니다. 다이얼 문제처럼 여러 문자가 같은 결과값을 가질 때 유용합니다.

💡 정보처리기사 실기 대비 Tip

  1. Call by Reference: C++에서 함수 매개변수에 &를 붙이면(예: void func(int& a)) 원본 값이 수정됩니다.
  2. 포인터와 배열: 문자열은 결국 char 타입의 배열이며, 마지막에 반드시 **NULL 문자(\0)**가 들어있음을 잊지 마세요.
  3. 제어문: while문과 for문의 조건식이 언제 종료되는지 '디버깅 표'를 그려가며 추적하는 연습이 필수입니다.

마무리하며 파이썬은 라이브러리를 잘 쓰는 능력이 중요하고, C++은 메모리와 데이터의 흐름을 직접 제어하는 맛이 있네요. 4월 20일 정보처리기사 필기 시험까지 이 감각을 유지하며 꾸준히 달려보겠습니다! 🚀

'코딩테스트 > 백준' 카테고리의 다른 글

[C/Python] 2차원 배열  (0) 2026.03.04
[C/Python] 심화1  (0) 2026.03.04
[C/Python] 1차원 배열  (0) 2026.03.01
[C/Python]반복문  (0) 2026.02.26
[C/Python] 조건문  (0) 2026.02.25