본문 바로가기

코딩테스트/프로그래머스

[C] 코딩 테스트 입문 100제 (84 ~ 100)

1. 문자열 계산하기 & OX퀴즈 (파싱의 기초)

문자열로 된 수식을 계산하는 문제는 strtok 함수와 atoi 함수의 조합이 핵심입니다.

  • 핵심 로직: 공백을 기준으로 항을 분리하고, 연산자(+, -)에 따라 state 변수를 조절하며 결과를 합산합니다.
  • 복기 포인트: strtok은 원본 문자열을 수정하므로 strdup으로 복사본을 만들어 사용하는 습관이 중요합니다.

2. 최빈값 구하기 (카운팅 정렬 응용)

가장 많이 등장한 숫자를 찾는 최빈값 문제는 배열의 인덱스를 활용하는 것이 가장 빠릅니다.

  • 핵심 로직: count[1000] 배열을 선언하고, 숫자가 나올 때마다 해당 인덱스의 값을 증가시킵니다. 이후 최댓값을 찾되, 중복 여부를 체크하여 -1을 반환하는 예외 처리가 관건입니다.

3. 특이한 정렬 (qsort 커스텀)

기준값 n과의 거리를 기준으로 정렬하는 문제입니다.

  • 핵심 로직: C 표준 라이브러리의 qsort를 사용하되, 비교 함수(compare)를 커스텀합니다. 거리가 같을 때는 값이 더 큰 숫자가 앞에 오도록 valB - valA를 반환합니다.
  • 주의사항: qsort는 추가 인자를 받지 못하므로 기준값 n전역 변수로 선언하여 공유합니다.

4. 다음에 올 숫자 (수열 판별)

등차수열과 등비수열을 판별하여 다음 항을 구하는 수학 문제입니다.

  • 핵심 로직: common[1] - common[0] == common[2] - common[1] 조건으로 등차수열 여부를 먼저 확인합니다. 등차라면 마지막 항에 공차를 더하고, 아니라면 공비를 곱합니다.

5. 옹알이 (1) (패턴 매칭)

조카가 발음할 수 있는 4가지 단어의 조합을 찾는 문제입니다.

  • 핵심 로직: strstr 함수로 유효한 발음을 찾아 **공백(" ")**으로 치환합니다. 단순히 삭제하면 앞뒤 글자가 붙어 새로운 단어가 생기는 오류가 발생하므로 반드시 공백 마킹을 활용해야 합니다.
  • 포인터 배열: char* can[] = {"aya", "ye", "woo", "ma"};와 같이 포인터 배열을 사용하면 메모리 낭비 없이 효율적으로 상수 문자열을 관리할 수 있습니다.