구현 유형이란?
- 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제
- 말그대로 코드로 구현하는 유형
- 정확한 문법 숙지, 여러 라이브러리 사용 경험 필요
구현 유형 (구현이 핵심이 문제 유형)
- 완전 탐색 : 모든 경우의 수를 다 계산하는 유형
- 시뮬레이션 : 문제에서 지시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 유형
예제 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 |