Search

Simulation

Simulation & Brute force

시뮬레이션 문제에서는 2차원 공간에서의 완전 탐색 및 방향 벡터가 자주 활용됨
여행가가 N*N 크기의 정사각형 공간 위에 서 있다. 가장 왼쪽 위 좌표는 (1,1)이며, 오른쪽 아래는 (N,N)이다. 여행가는 상하좌우로 한칸씩 이동할 수 있으며 시작좌표는 (1,1)이다. LRUD의 문자열을 받아서 마지막에 여행가가 위치한 죄표를 구해라. 이때 N*N크기의 정사각형 공간을 벗어나는 움직임은 무시된다.
n = int(input()) moves = input() arr = moves.split(' ') loc = [1,1] # LRUD dx = [-1,1,0,0] dy = [0,0,-1,1] for move in arr: if(move == 'L'): if loc[1] <= 1: continue else: loc[1]-=1 if(move == 'R'): if loc[1] >= n: continue else: loc[1]+=1 if(move == 'U'): if loc[0] <=1: continue else: loc[0]-=1 if(move == 'D'): if loc[0] >= n: continue else: loc[0]+=1 print(loc)
Python
복사

ex) 시각

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지 모든 시각중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성해라.
가능한 모든 시각의 경우를 하나씩 모두 세서 풀 수 있다
완전탐색(brute forcing) = 가능한 경우의 수를 모두 검사해보는 탐색방법
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)
Python
복사

ex) Knight

8*8의 체스판 위에서 특정 좌표가 주어졌을 때 나이트가 이동 가능한 위치의 수를 구해라 나이트는 2가지 경우로 이동할 수 있다. 1. 수평으로 두칸 이동하고 수직으로 한칸 이동 2. 수직으로 두 칸 이동하고 수평으로 한칸 이동 입력은 a1처럼 열과 행으로 이루어진다.
loc = input() row = int(loc[1]) col = int(ord(loc[0]) - ord('a')) + 1 steps = [(-2,-1), (-1,-2), (1,-2), (2, -1), (2,1), (1,2), (-1,2) , (-2,1) ] result = 0 for step in steps: next_row = row+step[0] next_col = col+step[1] if next_row >=1 and next_row <=8 and next_col >=1 and next_col <=8: result+=1 print(result)
Python
복사

ex) 문자열 재정렬

알파벳 대문자와 숫자(0~9)로만 이루어진 문자열이 입력으로 주어졌을 때 모든 알파벳을 오름차순으로 정렬하고 그 뒤에 모든 숫자를 더한 값을 이어서 출력해라.
input = input() arr = list(input) sum = 0 char_arr = [] for el in arr: if el.isalpha(): char_arr.append(el) else: sum+=int(el) print(''.join(sorted(char_arr)) + str(sum))
Python
복사