728x90
구현
- 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
- 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제
- 완전 탐색: 모든 경우의 수를 주저 없이 다 계사하는 해결 방법
- 시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행
구현 문제 접근법
- 구현 유형의 문제는 입력 조건 등을 문제에서 명시해주기 때문에 문제의 길이가 긴 편이나 문법에 익숙하다면 쉽게 풀 수 있음
예제 1. 상하좌우
내 풀이(오답)
# (1,1) 시작
# L: 좌, R: 우, U: 위, D: 아래
# 내 풀이(오답)
n = int(input())
move = list(map(str, input().split()))
x,y = 1,1
for i in move:
if i == 'R':
y += 1
elif i == 'L':
y -= 1
elif i == 'U':
x -= 1
elif i == 'D':
x += 1
print(x, y)
- "n * n 크기의 정사각형 공간을 벗어나는 움직임은 무시된다" 이 부분을 추가해야 함
정답
# 정답
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D에 따른 이동 방향
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']
# 이동 계획을 하나씩 확인
for plan in plans:
# 이동 후 좌표 구하기
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
# 공간을 벗어나는 경우 무시
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
# 이동한 위치로 업데이트
x, y = nx, ny
print(x, y)
예제 2. 시각
정답
h = int(input())
count = 0
for i in range(h+1):
for j in range(60):
for k in range(60):
# 매 시각 3이 포함되어 있으면 카운트
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
- 00시부터 N시 까지의 시각 중 3이 하나라도 포함되는 경우의 수 구하기
- 시, 분, 초를 3중 반복문으로 나누어 계산 (완전탐색법)
실전 1. 왕실의 나이트
정답
# 나이트의 위치에서 이동할 수 있는 경우의 수 구하기
# 이동1: 수평 2 후 수직 1
# 이동2: 수직 2 후 수평 1
# 행: a~h, 열: 1~8
# 공간 벗어나면 무시
# 나이트 위치
# 현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
next_row = row + step[0]
next_column = column + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가
if 1 <= next_row <= 8 and 1 <= next_column <= 8:
result += 1
print(result)
- 나이트가 이동할 수 있는 8가지 방향을 정의하고, 각 방향으로 이동했을 때 새로운 위치가 체스판 안에 있는지 확인
- ord: 각 문자에 해당하는 유니코드 값(정수)을 반환
기출 1. 럭키 스트레이트
내 풀이 (O)
N = input()
x = 0 #앞부분
for i in range(len(N)//2):
x += int(N[i])
y = 0 #뒷부분
for i in range(len(N)//2, len(N)):
y += int(N[i])
if x == y:
print("LUCKY")
else:
print("READY")
- 자릿수 기준 점수 N을 반으로 나누어 각각의 합이 같을 경우 LUCKY, 아니면 READY
- N은 항상 짝수
- 길이를 반으로 나누어 풀이
기출 2. 문자열 재정렬
정답
data = input()
result = []
value = 0
# 문자를 하나씩 확인하며
for x in data:
# 숫자인 경우 변수에 저장
if x.isdigit() :
value += int(x)
# 알파벳인 경우 리스트에 삽입
else :
result.append(x)
# 알파벳을 오름차순으로 정렬
result.sort()
# 숫자가 하나라도 존재하는 경우 가장 뒤에 삽입
if value != 0:
result.append(str(value))
# 최종결과출력(리스트를 문자열로 변환하여 출력)
print(''.join(result))
- isalpha(): 알파벳인지 확인
- isdigit(): 숫자인지 확인
728x90
'PYTHON > 기타' 카테고리의 다른 글
[이코테] 그리디(탐욕법) 알고리즘 (0) | 2024.03.25 |
---|---|
파이썬에서의 날짜와 시간 관련 자료형 (0) | 2024.02.21 |
Jupyter Notebook에 아나콘다 가상환경 커널 생성 및 연결하기 (2) | 2024.02.16 |
[나도코딩] 파이썬 웹 스크래핑(Web Scraping)(User_Agent, BeautifulSoup4) (2) | 2024.01.10 |
[데이터 분석] 파이썬 태양열 신재생 에너지 분석(수평면 산란 일사량,풍속과 태양열 발전량의 상관관계) (0) | 2024.01.05 |