깡뇽

[코테] 구현 공부하기 본문

Algorithm/Coding Test

[코테] 구현 공부하기

깡뇽 2022. 2. 2. 23:06
반응형

Day5

구현 → 완전 탐색(모든 경우의 수를 다 계산하는 방법), 시뮬레이션(문제에서 제시한 알고리즘을 차례대로 직접 수행)

 

파이썬 < int 자료형 데이터의 개수에 따른 메모리 사용량 >

데이터의 개수(리스트의 길이) : 1,000 → 메모리 사용량 약 4KB

1,000,000 → 약 4MB

10,000,000 → 약 40MB

주의) 리스트를 여러 개 선언하고, 그중에서 크기가 1,000만 이상인 리스트가 있다면 메모리 용량 제한으로 문제를 못 풀 수도 있음.

 

1초에 2,000만 번의 연산 수행 가능하다고 가정.

시간 제한이 1초, 데이터의 개수 100만 개인 문제는 시간 복잡도 O(NlogN) 이내의 알고리즘을 이용하여 풀어야 함.

 

예제1) 상하좌우

Q. N X N 크기의 정사각형 공간을 L(왼쪽), R(오른쪽), U(위쪽), D(아래쪽) 방향으로 한 칸 씩 이동할 수 있고, 가장 왼쪽 위 좌표는 (1,1) 이다. 그러나 공간을 벗어나는 이동은 무시된다. N 값, 이동 방향이 주어졌을 때 최종적으로 도착할 지점의 좌표를 출력하자.

A. 공간과 좌표를 구현해야 한다.

n = int(input()) #N입력
guide = input().split() #이동 방향 입력
x, y = 1, 1 #기준 좌표

#방향에 따른 이동 좌표
direction = ['L','R','U','D']
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]

#이동 방향에 따라 좌표 이동
for i in guide:
  for j in range(0, len(direction)):
    if i == direction[j]:
      nx = x + dx[j]
      ny = y + dy[j]
  
  #공간을 벗어나는 경우에는 무시하고 넘어가기
  if nx < 1 or ny < 1 or nx > n or ny > n:
    continue
  
  #좌표에 이동한 좌표 대입
  x, y = nx, ny

print(x, y)

 

예제2) 시각

Q. 00시 00분 00초부터 N(0≤N≤23)시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 경우의 수를 구하자.

A. 00시 00분 00초 ~ 23시 59분 59초까지의 모든 경우는 86,400가지로 100,000개보다 작아서 하나씩 세서 풀어도 된다. → 완전 탐색(Brute Forcing) 유형. 탐색할 전체 데이터가 100만 개 이하일 때 완전 탐색 사용.

n = int(input())
cnt = 0

#시
for i in range(0, n+1):
  #분
  for j in range(0, 60):
    #초
    for k in range(0, 60):
      #시간을 str타입으로 변환
      clock = str(i) + str(j) + str(k)
      #시간에 3이 들어가 있다면 1을 카운트
      if '3' in clock:
        cnt += 1
      else:
        continue

print(cnt)
반응형