Search
Duplicate

구현 : 시뮬레이션과 완전탐색

태그
구현
시뮬레이션
완전탐색
구현
구현이란, 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.
풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다.
예시
알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제
실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제
문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제
적절한 라이브러리를 찾아서 사용해야 하는 문제
일반적으로 알고리즘 문제에서의 2차원 공간은 행렬의 의미로 사용되며, 시뮬레이션 및 완전 탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용된다.
완전탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법
시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 문제 유형을 의미한다.
파이썬에서 리스트 크기
파이썬에서 여러 개의 변수를 사용할 때는 리스트를 이용한다. 이때 코딩 테스트의 메모리 제한을 고려해야 한다. 대체로 코딩 테스트 에서는 128 ~ 512 MB 로 메모리를 제한한다.
int 자료형 데이터의 개수에 따른 메모리 사용량
데이터의 개수(리스트의 길이)
메모리 사용량
1000
약 4 KB
1000000
약 4 MB
10000000
약 40 MB
파이썬은 다른 언어에 비해서 구현상의 복잡함이 적은 편이지만 데이터 처리량이 많을 때에는 꼭 메모리 제한을 고려하도록 하자. 리스트를 여러 개 선언하고, 그 중에서 크기가 1000 만 이상인 리스트가 있다면 메모리 용량 제한으로 문제를 풀 수 없게 되는 경우도 있다는 점을 기억하자. (하지만, 이런문제 또한 드물다)
예제 4-1 상하좌우
일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 시뮬레이션 유형으로도
분류 되며 구현이 중요한 대표적인 문제 유형이다.
예제 4-2 시각
if '3' in str(hour) + str(min) + str(sec): 을 이용해 여러곳을 한꺼번에 관찰
실전문제 왕실의 나이트
char → 아스키 코드값
ord() : 문자의 아스키코드를 알려주는 메서드
아스키 코드값 → char
char() : () 안의 아스키코드값에 해당하는 문자를 반환하는 메서드
실전문제 게임 개발
필요한 것들과 구현의 순서를 정해놓고 코딩을 시작해보자
필요한 것들
가로 * 세로 입력
행, 열 방향 입력
북, 동, 남, 서 정의
전체 맵 정보
방문한 위치를 저장하기 위한 행렬 (0 으로 초기화 후, 방문하면 1 증가) 과 입력받은 위치 방문처리
왼쪽으로 회전할 시의 함수
구현순서
while True : # 왼쪽으로 회전 # 이동 했을 시의 새로운 위치 구하는 식 if # 회전 한 이후 정면에 가보지 않은 칸이 존재한다면 이동 continue else # 회전 한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우 # 회전만 한다. # 네 방향 모두 갈 수 없는 경우 if # 4 번 회전했겠지 # 뒤로 갈 수 있다면 한 칸 뒤로 이동하지만 else # 뒤가 바다로 막혀있어서 이동할수 없다면 break # 회전 횟수는 0 으로 초기화 해주기 # 결과 출력
Python
복사