> >
Post

[알고리즘] 코딩테스트 준비 -2

[KT 에이블스쿨] AI 트랙 코딩테스트 대비 - 프로그래머스 기반 알고리즘 학습 과정 정리

[알고리즘] 코딩테스트 준비 -2

들어가며


지난 포스팅에서는 기본적인 자료구조와 간단한 문제풀이를 다뤄봤다.
이번에는 조금 더 심화된 내용의 알고리즘 문제 LV1 ~ LV2 문제들을 다뤄볼 예정이다.


1. 상태 전환을 활용한 문자열 처리


문제: 문자열 상태 처리

  • 주어진 문자열을 특정 규칙에 따라 새로운 문자열로 변환하는 문제


문제 설명

  • 문자열 code를 순차적으로 읽으며 처리한다.
  • mode는 0과 1 두 가지 상태가 있으며, 초기값은 0
  • “1”을 만나면 mode가 전환됨 (0→1 또는 1→0)

문제 해결 접근

  1. 상태(mode) 변수를 활용한 조건 처리
  2. 문자열 순회를 통한 인덱스 기반 처리
  3. 결과 문자열 동적 생성

처리 규칙

  1. Mode 0인 경우:
    • 짝수 인덱스의 문자만 결과 문자열에 추가
    • “1”을 만나면 Mode 1로 전환
  2. 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이면 더하지 않음
  • 선택된 항들의 합을 반환

문제 해결 접근

  1. 등차수열 생성
  2. included 배열을 통한 선택적 합계 계산
  3. 결과값 도출

처리 규칙

  • 등차수열의 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.