Algorithm

구현 문제

씬프 2021. 3. 27. 16:04
반응형

구현 문제는 머릿 속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.

알고리즘은 간단한데 코드가 길어지는 문제구현 문제는 머릿 속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.

 

알고리즘은 간단한데 코드가 길어지는 문제, 특정 소수점까지 출력해야하는 문제, 문자열 입력이 주어졌을 때, 한문자 단위로 끊어서 리스트에 넣어야 하는 문제 등이 까다로운 구현 문제에 속한다.

 

라이브러리 사용 경험이 부족하면 구현 유형의 문제를 풀 때 불리하다.

 

'이것이 코딩테스트다' 책에서는 완전 탐색과 시뮬레이션 문제를 구현 문제로 정의했다.

완전탐색은 모든 경우의 수를 주저 없이 다 계산하는 해결 방법,

시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 방식.

 

상하좌우 문제

상하좌우에 대한 리스트를 작성했고, 인덱스에 맞춰 x 좌표와 y 좌표에 대한 변화를 리스트로 작성했다.

move = ['L', 'R', 'U', 'D']
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

그리고 move 리스트에서 입력된 움직임에 대한 index를 index()함수를 통해 얻고, 현재 좌표에 dx, dy를 더했다.

이 때, 지도를 벗어나는 값에 대해서는 움직이지 않도록 먼저 다른 변수에 저장해 검증하는 단계를 거쳤다.

cnt = 0

# data는 입력된 move 값
for m in data:
	idx = move.index(m)
    nx = x + dx[idx]
    ny = y + dy[idx]
    
    # 값에 대한 검증, n은 행렬의 크기
    if nx < 1 or nx > n or ny < 1 or ny > n:
    	continue
    
    x, y = nx, ny
    cnt += 1

 

시각 문제

먼저 입력받은 시간 값에 대해서 반복문을 작성했다.

cnt = 0

# h는 받은 시간 값, h+1인 이유는 h까지 포함해야 하기 때문에
for i in range(h+1):
    for m in range(60):
        for s in range(60):
        	if '3' in str(i) + str(m) + str(s):
            	cnt += 1

 

위와 같이, 완전 탐색과 같은 문제, 시뮬레이션에 대한 문제는 문제를 꼼꼼히 잘 읽고 요구사항을 잘 구현하면 되는 문제.

'Algorithm' 카테고리의 다른 글

[Java] 정렬 알고리즘  (0) 2021.04.19
[Python] 프로그래머스 완전탐색 모의고사  (0) 2021.04.07
[Python] 정렬  (0) 2021.04.04
[Python] DFS, BFS  (0) 2021.04.04
Greedy(그리디) 알고리즘  (0) 2021.02.08