본문 바로가기
  • 공부한 것들과 여러가지를 기록해요
Python/코테

[이것이코딩테스트다] 구현

by 티권 2024. 3. 2.

구현 유형이란?

- 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제

- 말그대로 코드로 구현하는 유형

- 정확한 문법 숙지, 여러 라이브러리 사용 경험 필요

 

구현 유형 (구현이 핵심이 문제 유형)

- 완전 탐색 : 모든 경우의 수를 다 계산하는 유형

- 시뮬레이션 : 문제에서 지시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 유형

 

 

예제 4-1 상하좌우 (시뮬레이션)

- 리스트 활용해서 이동계획별 이동거리 정의

- continue 활용해서 공간 벗어나는 경우 무시

n = int(input())
plans = input().split()

# 초기 좌표
x, y = 1,1

# L,R,U,D 에 따른 이동방향
# 이렇게 list를 활용해서 move_types 별 이동을 정의할 수 있음
move_types = ['L','R','U','D']
dx = [0,0,-1,1]
dy = [-1,1,0,0]

for plan in plans:
    for i in range(len(move_types)):
        if plan == move_types[i]:
            # nx, ny : 이동 후 좌표
            nx = x + dx[i]
            ny = y + dy[i]
    # 공간 벗어나는 경우는 무시
    # continue로 x,y 에 이동 후 좌표 반영 안하게 함
    if nx < 1 or ny < 1 or nx > n or ny > n:
        continue
    x,y = nx, ny

print(x,y)

 

 

예제 4-2 시각(완전 탐색)

- 시, 분, 초를 각각 for문을 통해 완전 탐색

- str함수랑 + 로 문자열 처리해서 in 으로 판단

h = int(input())

count = 0
for i in range(h+1):
    for j in range(60):
        for k in range(60):
            if '3' in str(i)+str(j)+str(k):
                count += 1
print(count)

 

 

 

Q7 럭키 스트레이트

- 인덱싱하기 위해서 숫자말고 문자열로 숫자 입력 받기, 나중에는 연산을 위해 int로 변환

- len(num)//2 : 나눴을 때 몫, /2로 하면 실수형태라서 for문에 사용 불가

num = input()
left = 0
right = 0

for i in range(len(num)//2):
    right += int(num[:len(num)//2][i])
    left += int(num[len(num)//2:][i])

if right == left:
    print('LUCKY')
else:
    print('READY')

 

 

Q8 문자열 재정렬

- list.sort() : 오름차순, list.sort(reverse=True) : 내림차순

-> 한 번 적용하면 변수할당 안해도 계속 적용되어있음

- 구분자.join(list) : 리스트의 값과 값 사이에 구분자를 넣어서 하나의 문자열로 합쳐줌

 

- try, except 문으로 input_word에서 문자랑 숫자를 분리하는 작업부터 진행

 

input_word = input()

word = []
num = []

for i in input_word:
    try:
        num.append(int(i))
    except:
        word.append(i)

word.sort()

print(''.join(word)+str(sum(num)))

 

'Python > 코테' 카테고리의 다른 글

[이것이코딩테스트다] DFS/BFS  (0) 2024.03.08
[이것이코딩테스트다] 그리디  (0) 2024.03.05
try , except  (0) 2023.03.12
map()  (0) 2023.03.02