Algorithm/연습

[이코테] 04. 구현

SETORY 2022. 1. 8. 22:27

예제 4-1 

나의 풀이

# n=int(input())
# movement = list(input().split())

n=5
movement = ["R","R","R","U","D","D"]
def solutions(n,movement):
    answer = 0
    x,y = 1,1

    # 상하좌우
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    

    for move in movement:
        print(move)
        if move == "U":
            nx = x+dx[0]
            ny = y+dy[0]
        elif move == "D":
            nx = x+dx[1]
            ny = y+dy[1]
        elif move == "L":
            nx = x+dx[2]
            ny = y+dy[2]
        elif move == "R":
            nx = x+dx[3]
            ny = y+dy[3]

        if 0<nx<=n and 0<ny<=n:
            x,y = nx,ny
            print(x,y)

    return [x,y]

print(solutions(n,movement))

다시 줄여서 써본 코드

# n=int(input())
# movement = list(input().split())

n=5
movement = ["R","R","R","U","D","D"]
def solutions(n,movement):
    answer = 0
    x,y = 1,1

    # 상하좌우
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    move_type = ["U","D","L","R"]


    for move in movement:
        #print(move)
        for idx in range(4):
            if move == move_type[idx]:
                nx = x+dx[idx]
                ny = y+dy[idx]
                
        if 0<nx<=n and 0<ny<=n:
            x,y = nx,ny
            print(x,y)

    return [x,y]

print(solutions(n,movement))

예제 4-2 시각

n = int(input())

def solutions(n):
    answer = 0
    for i in range(n+1): # n시 59분까지니까
        for j in range(60):
            for k in range(60):
                if '3' in str(i) + str(j) + str(k):
                    answer+=1
    return answer

print(solutions(n))

 

실전 문제 왕실의 나이트

# 왕실의 나이트
password = input()

def solutions(password):
    answer=0
    target_x = int(ord(password[0])-ord('a')) + 1
    target_y = int(password[1])

    move_case = [(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,-2)]

    for move in move_case:
        nx = target_x + move[0]
        ny = target_y + move[1]

        if 1<=nx<=8 and 1<=ny<=8:
            answer+=1

    return answer

print(solutions(password))

 

게임 개발

n, m = map(int, input().split())
now  = list(map(int, input().split()))
graph = []
for _ in range(n):
    graph.append(list(map(int, input().split())))
d = [[0]*m for i in range(n)]

def solution(now, graph):
    answer = 1 # 현재부터 시작 (현재도 방문한 칸 수 )
    # 북, 동, 남, 서
    dx = [-1, 0, 1, 0]
    dy = [0, 1 ,0, -1]

    x, y ,direction = now[0], now[1], now[2]

    d[x][y] = 1 # 현재 출발 지점

    def turn_left(direction):
        direction += 1
        if direction == 4:
            direction = 0
        return direction

    turn_time = 0
    while True :
        # 먼저 왼쪽으로 회전
        direction = turn_left(direction)
        # print(direction)

        nx = x + dx[direction]
        ny = y + dy[direction]

        if graph[nx][ny]==0 and d[nx][ny] ==0:
            d[nx][ny] = 1
            x = nx
            y = ny
            answer+=1
            turn_time = 0
            continue
        #회전한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우
        else:
            turn_time+=1
        # 방향 다 돌았을 ㄱㅇ우
        if turn_time ==4:
            nx = x - dx[direction]
            ny = y - dy[direction]

            if graph[nx][ny] == 0:
                x = nx
                y = ny
            else:
                break
            turn_time = 0
    return answer

print(solution(now, graph))