알고리즘

[이코테] 4장 구현

jjjaeunn 2023. 6. 29. 15:39

👩🏻‍💻 본 포스팅은 '(이코테 2021) 이것이 취업을 위한 코딩 테스트다 with 파이썬' 교재를 공부하고 풀이하며 정리한 글입니다.

 


예제 4-1

import sys

n = int(sys.stdin.readline())
x,y = 1,1

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

plans = sys.stdin.readline().split()
for plan in plans:
    
    for i in range(len(move)):
        if plan==move[i]:
            if x + dx[i] > n or y + dy[i] > n or x + dx[i]< 1 or y + dy[i]<1:
                break
            nx = x + dx[i]
            ny = y + dy[i]
    x, y = nx, ny

print(x, " ", y)

처음에 x, y 좌표가 거꾸로 나와서 한참 찾았는데, dx dy를 거꾸로 설정해주어야 했다 ... 안일하게 x, y 좌표라고 생각했다가 헤매게 되었음

 

 

예제 4-2 /  백준 18312

import sys

n = sys.stdin.readline()

count = 0
for i in range (int(n)+1):   #시간별로 카운트
    for j in range (60):
        for k in range (60):
            if '3' in str(i) + str(j) + str(k):
                count += 1

print(count)

모범답안에서는 가장 하위 for문에서 str(i), str(j), str(k)를 한번에 검사한다. k가 증가할 때마다 검사해야 하므로 두번째 코드처럼 해야 올바른 답을 도출할 수 있다.

 

import sys

n,p = map(int, sys.stdin.readline().split())

count = 0
for i in range (n+1):   #시간별로 카운트
    if i< 10 : i = '0' + str(i)
    for j in range (60):
        if j<10 : j = '0' + str(j)
        for k in range (60):
            if k<10 : k = '0' + str(k)
            if str(p) in str(k)+str(i)+str(j):
                count+=1



print(count)

백준의 문제에서는 count하는 정수 k를 따로 입력받아야 하는데, 따라서 n과 p를 int로 받기 위해 map 함수를 사용하였다.

0<=k라는 조건이 또 주어지기 때문에 -> i, j, k에서 한자리 수일 경우 0을 카운트하도록 해야 한다.

따라서 각 for문 마다 0을 카운트하는 경우를 고려하여 앞에 '0' 문자열을 추가하였다.