info8995 님의 블로그

27일차(코딩테스트 문제풀이) 본문

TIL(Today I Learned)/C++

27일차(코딩테스트 문제풀이)

info8995 2025. 1. 23. 20:18

1. 문제 요약

  • 공백으로 단어를 구분하여 각 단어에서 짝수 인덱스는 대문자, 홀수 인덱스는 소문자로 변환하는 문제.
  • 예: "try hello world" → "TrY HeLlO WoRlD"

2. 풀이 코드

3. 문제 해결 과정

  • 공백 처리: 공백이 등장하면 단어의 인덱스를 초기화(a = 0)하여 새로운 단어로 간주.
  • 짝수/홀수 인덱스 처리:
    • 짝수 인덱스는 소문자를 대문자로 변환.
    • 홀수 인덱스는 대문자를 소문자로 변환.
  • 아스키 코드 활용:
    • 소문자('a'~'z')는 -32를 하면 대문자가 됨.
    • 대문자('A'~'Z')는 +32를 하면 소문자가 됨.

4. 겪었던 어려움

  1. 공백에서 단어를 나누는 방법 고민:
    • 공백을 기준으로 인덱스를 초기화해야 한다는 점을 이해하는 데 시간이 걸렸음.
    • 단순히 문자열을 순회하는 방식으로는 단어를 구분하기 어려웠고, 공백을 만나면 a = 0으로 초기화하는 방법을 적용함.
  2. 아스키 코드 조건 비교:
    • 처음에는 대문자와 소문자 범위를 혼동하여 조건식('a' <= s[i] <= 'z')에 오류가 있었음.

5. 배운 점

    • 공백 처리와 같이 조건이 많은 문자열 문제는 예외 상황을 꼼꼼히 다뤄야 함.
    • 공백을 기준으로 단어를 나누는 방법(공백을 만나면 인덱스를 초기화하는 로직)을 배움.
    • 아스키 코드를 활용한 문자 변환 로직을 익히게 됨
      • 'a'와 'A'의 차이는 32로 일정하다는 점을 기억!