파이썬은 간결한 문법과 풍부한 라이브러리로 코딩 테스트에 적합한 언어로 널리 사용되고 있습니다. 이번 글에서는 실제 코딩 테스트에서 자주 출제되는 문제 유형들을 분석하고, 이를 효과적으로 해결하는 방법에 대해 논의하겠습니다.
1. 기본 자료구조 활용하기
코딩 테스트의 기본은 자료구조를 적절히 활용하는 것입니다. 리스트, 딕셔너리와 같은 기본 자료구조를 활용한 문제들을 살펴보겠습니다.
1.1 카운팅과 리스트 활용
첫 번째 예제로, 티셔츠 사이즈 별 개수를 세는 문제를 살펴보겠습니다:
def solution(shirt_size):
size_counter = [0, 0, 0, 0, 0, 0]
for size in shirt_size:
if size == "XS":
size_counter[0] += 1
elif size == "S":
size_counter[1] += 1
elif size == "M":
size_counter[2] += 1
elif size == "L":
size_counter[3] += 1
elif size == "XL":
size_counter[4] += 1
elif size == "XXL":
size_counter[5] += 1
return size_counter
이 코드는 기본적인 카운팅 알고리즘을 보여줍니다. 하지만 더 파이썬스러운 방식으로는 다음과 같이 작성할 수 있습니다:
def solution(shirt_size):
sizes = ["XS", "S", "M", "L", "XL", "XXL"]
return [shirt_size.count(size) for size in sizes]
1.2 딕셔너리를 활용한 할인 적용
회원 등급에 따른 할인율을 적용하는 문제도 딕셔너리를 활용하면 간결하게 해결할 수 있습니다:
def solution(price, grade):
discount_rates = {"S": 0.05, "G": 0.10, "V": 0.15}
discount = price * discount_rates[grade]
return int(price - discount)
2. 날짜 계산과 알고리즘
프로그래밍에서 날짜 계산은 자주 등장하는 문제 유형입니다. 다음 예제를 통해 날짜 간의 차이를 계산하는 방법을 알아보겠습니다:
def func_a(month, day):
month_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
total = 0
for i in range(month-1):
total += month_list[i]
total += day
return total
def solution(start_month, start_day, end_month, end_day):
start_total = func_a(start_month, start_day)
end_total = func_a(end_month, end_day)
return end_total - start_total
이 문제는 1월 1일부터의 일수를 계산하여 두 날짜 간의 차이를 구하는 방식입니다. datetime
모듈을 사용할 수도 있지만, 알고리즘의 기본 원리를 이해하는 것이 중요합니다.
3. 데이터 분석과 빈도 계산
데이터 분석 관련 문제도 코딩 테스트에서 자주 등장합니다. 다음은 리스트에서 가장 많이 등장하는 숫자와 가장 적게 등장하는 숫자의 비율을 계산하는 문제입니다:
def func_a(arr):
counter = {}
for x in arr:
if x in counter:
counter[x] += 1
else:
counter[x] = 1
return counter
def func_b(counter):
max_count = 0
for key in counter:
if counter[key] > max_count:
max_count = counter[key]
return max_count
def func_c(counter):
min_count = float('inf')
for key in counter:
if counter[key] < min_count:
min_count = counter[key]
return min_count
def solution(arr):
counter = func_a(arr)
max_count = func_b(counter)
min_count = func_c(counter)
return max_count // min_count
이 코드는 빈도수를 계산하고, 최대 빈도와 최소 빈도의 비율을 구합니다. 파이썬의 collections.Counter
를 사용하면 더 간결하게 작성할 수 있습니다:
from collections import Counter
def solution(arr):
counter = Counter(arr)
return max(counter.values()) // min(counter.values())
4. 문자열 처리와 조작
문자열 처리는 코딩 테스트의 단골 주제입니다. 특히 팰린드롬(회문) 검사는 자주 출제됩니다:
def solution(sentence):
str = ""
for c in sentence:
if c != ' ' and c != '.':
str += c.lower()
size = len(str)
for i in range(size // 2):
if str[i] != str[size - 1 - i]:
return False
return True
이 코드는 문장에서 공백과 마침표를 제거한 후, 앞뒤로 읽어도 같은지 확인합니다. 파이썬에서는 슬라이싱을 활용하여 더 간결하게 작성할 수 있습니다:
def solution(sentence):
s = ''.join(c.lower() for c in sentence if c.isalpha())
return s == s[::-1]
5. 반복 패턴 제거하기
연속된 중복 문자를 제거하는 문제도 자주 출제됩니다:
def solution(characters):
result = ""
result += characters[0]
for i in range(1, len(characters)):
if characters[i-1] != characters[i]:
result += characters[i]
return result
이 코드는 연속된 중복 문자를 하나로 압축하는 기능을 수행합니다.
6. 배열과 리스트 조작
배열을 역순으로 만드는 문제도 기본적이지만 중요한 연습입니다:
def solution(arr):
length = len(arr)
for i in range(length // 2):
arr[i], arr[length - 1 - i] = arr[length - 1 - i], arr[i]
return arr
파이썬에서는 슬라이싱을 사용하여 간단하게 해결할 수 있습니다:
def solution(arr):
return arr[::-1]
7. 수학적 패턴 인식 – 369 게임
알고리즘 문제 중에는 특정 패턴을 찾는 문제가 많습니다. 369 게임과 같은 문제는 규칙성을 파악하는 능력을 테스트합니다:
def solution(number):
count = 0
for i in range(1, number + 1):
current = i
while current != 0:
digit = current % 10
if digit == 3 or digit == 6 or digit == 9:
count += 1
current = current // 10
return count
문자열 변환을 사용하면 더 간결하게 작성할 수 있습니다:
def solution(number):
count = 0
for i in range(1, number + 1):
count += str(i).count('3') + str(i).count('6') + str(i).count('9')
return count
8. 조건 필터링과 데이터 처리
토익 점수에 따른 수강 대상자를 선별하는 문제는 조건에 따른 필터링의 좋은 예입니다:
def solution(scores):
count = 0
for s in scores:
if 650 <= s < 800: # 수정된 부분: s <= 800이 아닌 s < 800
count += 1
return count
9. 실제 응용 문제: 장갑 쌍 맞추기
실생활 문제를 코드로 해결하는 능력도 중요합니다. 다음은 왼손 장갑과 오른손 장갑을 짝지어 최대한 많은 쌍을 만드는 문제입니다:
def func_a(gloves):
counter = [0 for _ in range(11)]
for x in gloves:
counter[x] += 1
return counter
def solution(left_gloves, right_gloves):
left_counter = func_a(left_gloves)
right_counter = func_a(right_gloves)
total = 0
for i in range(1, 11):
total += min(left_counter[i], right_counter[i])
return total
이 코드는 각 제품 번호별로 왼손, 오른손 장갑의 개수를 세고, 짝을 지을 수 있는 최대 개수를 계산합니다.
10. 제어 구조와 조건 분기: 3의 배수와 5의 배수 비교
조건 분기와 논리적 판단도 코딩 테스트의 중요한 부분입니다:
def func_a(arr):
count = 0
for n in arr:
if n % 3 == 0:
count += 1
return count
def func_b(arr):
count = 0
for n in arr:
if n % 5 == 0:
count += 1
return count
def solution(arr):
count_three = func_a(arr)
count_five = func_b(arr)
if count_three > count_five:
return "three"
elif count_three < count_five:
return "five"
else:
return "same"
11. 게임 로직 구현하기
게임 관련 로직을 구현하는 문제도 자주 출제됩니다. 다음은 캐릭터와 몬스터의 전투를 시뮬레이션하는 문제입니다:
def solution(attack, recovery, hp):
count = 0
while hp > 0:
count += 1
hp -= attack
if hp <= 0:
break
hp += recovery
return count
이 코드는 몬스터를 처치하기 위해 필요한 최소 공격 횟수를 계산합니다.
12. 실생활 문제: 엘리베이터 이동 거리
실생활 시나리오를 코드로 표현하는 능력도 중요합니다:
def solution(floors):
total = 0
for i in range(1, len(floors)):
total += abs(floors[i] - floors[i-1])
return total
이 코드는 엘리베이터가 각 층 사이를 이동할 때의 총 거리를 계산합니다.
13. 단위 변환 문제
화씨온도와 섭씨온도 간의 변환과 같은 단위 변환 문제도 자주 출제됩니다:
def solution(value, unit):
converted = 0
if unit == "C":
converted = (value * 1.8) + 32
elif unit == "F":
converted = (value - 32) / 1.8
return int(converted) # 수정된 부분: 정수 부분만 반환
14. 자릿수 분석과 소수 판별
자연수의 자릿수를 분석하는 문제도 알고리즘의 기본입니다:
def solution(number):
count = 0
prime = [2, 3, 5, 7]
while number > 0:
digit = number % 10
if digit in prime: # 수정된 부분: prime.includes(digit)가 아닌 digit in prime
count += 1
number //= 10
return count
15. 상품권 지급 문제
구매 금액에 따른 상품권 지급 문제는 조건부 로직을 테스트합니다:
def solution(purchase):
total = 0
for p in purchase:
if p >= 1000000:
total += 50000
elif p >= 600000:
total += 30000
elif p >= 400000:
total += 20000
elif p >= 200000:
total += 10000
return total
결론
코딩 테스트에서 좋은 성적을 거두기 위해서는 다양한 문제 유형에 익숙해지고, 효율적인 알고리즘과 자료구조를 활용할 수 있어야 합니다. 또한, 문제를 정확히 이해하고 분석하는 능력이 중요합니다.
이번 포스팅에서는 기본적인 코딩 테스트 문제 유형과 그 해결 방법에 대해 알아보았습니다. 이러한 기본 문제를 통해 알고리즘적 사고를 기르고, 더 복잡한 문제에 도전할 수 있는 기반을 마련하시기 바랍니다.
매일 꾸준히 문제를 풀고, 다양한 해결책을 비교하며 학습하는 것이 코딩 테스트 준비의 핵심입니다. 알고리즘은 실전을 통해 가장 잘 학습됩니다. 지금까지 살펴본 문제들을 기반으로 더 많은 연습을 해보시길 권장합니다.
답글 남기기