[PART2] 4-1(구현): 상하좌우, 시각

코뉴·2021년 1월 12일
0

이코테: 문제풀이

목록 보기
10/28

💥이코테 실전문제 뽀개기💥

💻 4-1 상하좌우

난이도🖤🤍🤍 | 풀이시간 15분 | 시간제한 1초 | 메모리제한 128MB


📌2021/01/12 작성 코드

n = int(input())
plan = input().split()

x = 1
y = 1

for mov in plan:
    if mov == 'L':
        if y - 1 >= 1:
            y -= 1
    elif mov == 'R':
        if y + 1 <= n:
            y += 1
    elif mov == 'U':
        if x - 1 >= 1:
            x -= 1
    elif mov == 'D':
        if x + 1 <= n:
            x += 1

print(x, y)

🤓 문제 해설

  • 문제를 요구사항대로 구현하면 연산 횟수는 이동 횟수에 비례.
    이동 횟수가 N번인 경우 시간 복잡도는 O(N)
  • 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 시뮬레이션(simulation) 유형으로 분류

🤓 답안 예시


# N 입력받기
n = int(input())
x, y = 1, 1
plans = input().split()

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

# 이동 계획을 하나씩 확인
for plan in plans:
    # 이동 후 좌표 구하기
    for i in range(len(move_types)):
        if plan == move_types[i]:
            nx = x + dx[i]
            ny = y + dy[i]
    # 공간을 벗어나는 경우 무시
    if nx < 1 or ny < 1 or nx > n or ny > n:
        continue
    # 이동 수행
    x, y = nx, ny

print(x, y)

🤔 리뷰

  • 뭐지 내 코드가 더 직관적인걸?

💻 4-2 시각

난이도🖤🤍🤍 | 풀이시간 15분 | 시간제한 2초 | 메모리제한 128MB


📌2021/01/12 작성 코드

n = int(input())
h, m, s = 0, 0, 0
answer = 0

while h <= n:
    # m이 60 미만일 때
    while m < 60:
        # s(초)를 1초씩 증가시키며 찾아본다
        # s가 60 미만일 때
        while s < 60:
            # 3이 있는지 찾는다
            if '3' in str(h*10000 + m*100 + s):
                answer += 1
            # s 1증가
            s += 1
        # s가 60일 때
        if s == 60:
            s = 0
            m += 1

    # m이 60일 때
    if m == 60:
        m = 0
        h += 1

print(answer)

🤓 문제 해설

  • 모든 시각의 경우를 하나씩 모두 세서 풀 수 있음.
    => 24(h) 60(m) 60(m) = 86,400
    00:00:00 ~ 23:59:59 까지의 경우가 86,400가지밖에 존재하지 않는다.
    경우의 수가 100,000개도 되지 않으므로 파이썬에서 문자열 연산을 이용해 3이 시각에 포함되어 있는지 확인해도 2초 안에 문제 해결 가능!
  • 완전 탐색(Brute Force) 유형으로 분류됨.
  • 일반적으로 brute force는 비효율적인 시간 복잡도를 가지고 있으므로 확인(탐색) 해야 할 전체 데이터의 개수가 100만 개 이하일 때 완전 탐색을 사용하면 적절!

🤓 답안 예시


  
# H를 입력받기
h = int(input())

count = 0
for i in range(h + 1):
    for j in range(60):
        for k in range(60):
            # 매 시각 안에 '3'이 포함되어 있다면 카운트 증가
            if '3' in str(i) + str(j) + str(k):
                count += 1

print(count)

🤔 리뷰

  • 3중 반복문이 조금 헷갈렸다는 것 말고는 크게 어려운 점 없었음
  • 데이터 검사할 때 제한시간확인해야 할 데이터 개수 check
profile
코뉴의 도딩기록

0개의 댓글

관련 채용 정보