Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 부트캠프
- kb it's your life 기자단
- sql
- kb 취업교육
- 이차원배열
- SQLD
- autohotkey
- prefixsum #C언어
- kb 기자단
- kbit교육
- 오토핫키
- 취업교육
- kb it's your life
- KB국민은행
- 반별이벤트
- 금융권it
- kb취업교육
- SQL데이터타입
- 전문가특강
- 첫알고리즘평가
- kb네트워킹캠프
- 알고리즘
- sql내장함수
- 멀티캠퍼스
- 금융권 부트캠프
- 금융권 it
- kb it's your life 6기
Archives
- Today
- Total
지식보부상님의 공부 일지
[구현] Chapter 04 구현 (p.103 ~ 121) 본문
<이것이 취업을 위한 코딩테스트다 with 파이썬> 책의 내용을 정리한 것입니다.
이 책에서는 완전 탐색, 시뮬레이션 유형을 모두 '구현'의 유형으로 생각하여 다룬다.
완전 탐색: 모든 경우의 수를 다 계산하여 해결 하는 방법
시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 방법
파이썬에서는 일반적으로 정수의 범위를 고려하지 않아도 괜찮지만,
C / C++ 의 경우는 정수의 범위를 고려해야 한다.
정수형 종류 | 자료형 크기 | 자료형 범위 |
int | 4Byte | -2,147,483,648 ~ 2,147,483,648 |
long long | 8Byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 |
Biginteger (클래스) | 가변 | 제한 없음 |
파이썬에서 리스트 크기
주로 128~512MB로 메모리를 제한하므로, 이를 고려하여 구현해야 한다.
데이터 개수(리스트 길이) | 메모리 사용량 |
1,000 | 약 4KB |
1,000,000 | 약 4MB |
10,000,000 | 약 40MB |
따라서 리스트의 크기가 1,000만 이상인 리스트는 메모리 용량 제한이 있을 수 있음을 염두해야 한다.
[예제 4-1] 상하좌우 (P.110)
n = int(input())
plans = list(input().split())
x, y = 1, 1
nx, ny = 0, 0
#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 nx > n or ny < 1 or ny > n:
continue
x, y = nx, ny
print(x, y)
[예제 4-2] 시각 (P.113)
n = int(input())
result = 0
for h in range(n + 1):
for m in range(60):
for s in range(60):
if '3' in str(h) + str(m) + str(s):
result += 1
print(result)
모두 확인하는 완전 탐색 알고리즘, 비효율적인 시간 복잡도 가짐
[예제 2] 왕실의 나이트 (P.115)
position = list(input())
alphabet_dict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8}
x, y = alphabet_dict[position[0]], int(position[1])
# x = int(ord(position[0])) - int(ord('a')) + 1 으로 구할 수 있음(유니코드 이용)
#이동 가능한 동선
dx = [-2, -2, 2, 2, -1, -1, 1, 1]
dy = [-1, 1, -1, 1, -2, 2, -2, 2]
result = 0
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if nx <1 or ny <1 or nx > 8 or ny > 8:
continue
result += 1
print(result)
[예제 3] 게임 개발 (P.118)
n, m = map(int, input().split())
x, y, direction = map(int, input().split())
board = []
for _ in range(n):
arr = list(map(int, input().split()))
board.append(arr)
# 캐릭터가 이동하여 방문한 곳 check용
check = [[0] * m for _ in range(n)]
check[x][y] = 1
# 북, 동, 남, 서 방향
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 북->서->남->동->북 순서로 회전해야 함
def turn_left():
global direction
direction -= 1
if direction < 0:
direction += 4
result = 1
turn_time = 0
while True:
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
# 매뉴얼 1번 구현
if board[nx][ny] ==0 and check[nx][ny] == 0:
result += 1
x, y = nx, ny
check[nx][ny] = 1
turn_time = 0
continue
# 매뉴얼 2번 구현
else:
turn_time += 1
# 매뉴얼 3번 구현
if turn_time == 4:
nx = x - dx[direction]
ny = y - dy[direction]
if board[nx][ny] == 0:
x, y = nx, ny
else:
break
turn_time = 0
print(result)
'파이썬 공부' 카테고리의 다른 글
[DFS/BFS] Chapter 05 DFS/BFS (0) | 2025.02.05 |
---|---|
[그리디] CHAPTER 03 그리디 (p. 86~102) (1) | 2025.02.04 |
[Python for Data Analysis] 03. 내장 자료구조, 함수, 파일 (1) (1) | 2024.12.06 |
[Python for Data Analysis] 02. 파이썬 기초 (1) | 2024.12.06 |
[Python 기초] 문자열(String) (1) | 2024.12.05 |