[알고리즘] 코딩테스트 준비 -2
[KT 에이블스쿨] AI 트랙 코딩테스트 대비 - 프로그래머스 기반 알고리즘 학습 과정 정리
[알고리즘] 코딩테스트 준비 -2
들어가며
지난 포스팅에서는 기본적인 자료구조와 간단한 문제풀이를 다뤄봤다.
이번에는 조금 더 심화된 내용의 알고리즘 문제 LV1 ~ LV2 문제들을 다뤄볼 예정이다.
1. 상태 전환을 활용한 문자열 처리
문제: 문자열 상태 처리
- 주어진 문자열을 특정 규칙에 따라 새로운 문자열로 변환하는 문제
문제 설명
- 문자열
code
를 순차적으로 읽으며 처리한다. mode
는 0과 1 두 가지 상태가 있으며, 초기값은 0- “1”을 만나면
mode
가 전환됨 (0→1 또는 1→0)
문제 해결 접근
- 상태(mode) 변수를 활용한 조건 처리
- 문자열 순회를 통한 인덱스 기반 처리
- 결과 문자열 동적 생성
처리 규칙
- Mode 0인 경우:
- 짝수 인덱스의 문자만 결과 문자열에 추가
- “1”을 만나면 Mode 1로 전환
- Mode 1인 경우:
- 홀수 인덱스의 문자만 결과 문자열에 추가
- “1”을 만나면 Mode 0으로 전환
구현 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 풀이
def solution(code):
mode = 0
ret = ""
for idx in range(len(code)): # idx를 0 부터 code의 길이 - 1 까지 1씩
if mode == 0: # mode가 0일 때
if code[idx] == "1": # code[idx]가 1이면
mode = 1 # mode를 1로 변경
elif idx % 2 == 0: # 1이 아니면 idx가 짝수일 때만
ret += code[idx] # code[idx] 추가
else: # mode가 1일 떄
if code[idx] == "1": # code[idx] 가 1이면
mode = 0 # mode를 0으로 변경
elif idx % 2 != 0: # code[idx]가 "1"이 아니면 홀수일 때만
ret += code[idx] # ret 맨 뒤 code[idx] 추가
return ret if ret else "EMPTY" # ret이 빈 문자라면 "EMPTY" return
# test
code = "abc1abc1abc"
solution(code) # 'acbac'
2. 등차수열 특정 항만 더하기
문제: 등차수열과 선택적 합계 계산
문제 설명
- 등차수열의 첫 항
a
, 공차d
, 그리고included
배열이 주어짐 included[i]
가 true이면 i+1항을 더하고, false이면 더하지 않음- 선택된 항들의 합을 반환
문제 해결 접근
- 등차수열 생성
- included 배열을 통한 선택적 합계 계산
- 결과값 도출
처리 규칙
- 등차수열의 i번째 항 = a + (i-1)d
- included[i]가 true인 항만 합계에 포함
- 최종 합계 반환
구현 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 풀이
def solution(a, d, included): # a = 첫쨰항 / d = 공차
result = 0
for i in range(len(included)): # included의 길이만큼
term = a + i * d # i번째 등차수열 항 계산
if included[i]: # 해당 항이 True이면 더하기
result += term
return result
# test
a = 3
d = 4
included = [True, False, False, True, True]
solution(a, d, included) # 37
마무리
이번 포스팅에서는 등차수열의 특정 항을 선택적으로 더하는 문제를 살펴보았다.
이 문제를 통해 등차수열의 기본 개념과 Python의 리스트 인덱싱을 활용하는 방법을 복습할 수 있었다.
다음 포스팅에서도 기초적인 알고리즘 문제들을 하나씩 살펴보려한다.
다음 포스팅
시리즈
This post is licensed under CC BY 4.0 by the author.