본문 바로가기

코딩테스트/백준

[C/Python] 심화1

백준 '심화 1' 단계는 단순한 입출력을 넘어 문자열 제어, 배열 활용, 그리고 실수 연산까지 다루는 아주 중요한 구간입니다. 특히 정보처리기사 실기 시험의 단골 소재인 '집계 알고리즘'과 '조건 제어'를 연습하기에 최적의 문제들이 모여 있습니다. 그동안 파이썬과 C++ 두 언어로 풀어보며 정리한 핵심 로직들을 공유합니다.


1. 문자열의 대칭과 반복: 팰린드롬 & 별 찍기

문자열의 앞뒤를 비교하거나 특정 규칙으로 별을 찍는 문제는 반복문 제어 능력을 테스트합니다.

  • 팰린드롬 확인 (10988번):
    • Python: s == s[::-1] 한 줄로 끝나는 간결함!
    • C++: 양 끝에서 좁혀오는 투 포인터(Two Pointers) 방식으로 메모리 효율 극대화.
  • 별 찍기 - 7 (2444번):
    • 상단과 하단의 대칭 구조를 파악하는 것이 핵심입니다.
    • 주의: C++에서 증감식 오타로 인한 무한 루프를 조심해야 합니다! (for문의 제어 변수 확인 필수)

2. 빈도수 체크와 배열 인덱싱: 단어 공부 (1157번)

이 단계에서 가장 중요한 테크닉은 **'문자를 배열 인덱스로 변환'**하는 것입니다.

  • 핵심 로직: count[toupper(c) - 'A']++
    • 아스키코드 차이를 이용하여 알파벳 26개를 0~25번 방에 매핑합니다.
  • 최댓값 처리:
    • 가장 큰 빈도수가 여러 개일 경우 ?를 출력하는 예외 처리가 포인트입니다.
    • 정보처리기사 시험에서 '최댓값 교체 알고리즘' 빈칸 채우기로 자주 출제되는 유형입니다.

3. 그룹 단어 체커 (1316번): 방문 기록(Visited) 활용

"한번 나온 문자가 떨어져서 다시 나오지 않는가?"를 판별하는 문제입니다.

  • 알고리즘:
    1. 현재 문자와 이전 문자가 다를 때(연속성 단절)를 포착합니다.
    2. 그때 바뀐 문자가 이미 방문한 적이 있는지(bool 배열) 체크합니다.
  • C++ 구현: bool alphabet[26] 배열을 선언하여 상태를 저장하는 방식이 가장 정석적이고 빠릅니다.

4. 실전 가중치 평균: 너의 평점은 (25206번)

학점과 평점을 곱해 평균을 내는 실무형 문제입니다.

  • 실수(double) 연산:
    • 부동 소수점 오차를 줄이기 위해 C++에서는 fixed와 setprecision(6)을 사용하여 출력 정밀도를 고정해야 합니다.
  • P/F 과목 예외:
    • P 등급인 경우 계산에서 완전히 제외(continue)하는 조건 처리가 핵심입니다.

💡 학습 Tip (정처기 실기 대비)

  1. C언어/C++: 배열의 인덱스는 항상 0부터 시작하며, 문자열의 끝에는 널 문자(\0)가 있음을 잊지 마세요.
  2. Python: set(), count(), 슬라이싱 등을 적절히 섞어 쓰면 로직을 훨씬 직관적으로 짤 수 있습니다.
  3. 공통: break는 가장 가까운 반복문 하나만 탈출한다는 점을 명심하세요!

✅ 마치며

심화 1단계를 마무리하며 알고리즘의 기초 체력을 단단히 다졌습니다. 이제 다음 단계인 2차원 배열로 넘어가 행렬 연산의 기초를 배워보겠습니다.

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

[C/Python] 수학 1  (0) 2026.03.05
[C/Python] 2차원 배열  (0) 2026.03.04
[C/Python] 문자열  (0) 2026.03.02
[C/Python] 1차원 배열  (0) 2026.03.01
[C/Python]반복문  (0) 2026.02.26