상하좌우
•
L : 왼쪽으로 한 칸 이동
•
R : 오른쪽으로 한 칸 이동
•
U : 위로 한 칸 이동
•
D : 아래로 한 칸 이동
주어진 공간 내에서 벗어나는 이동은 무시된다.
•
첫째줄에 공간의 크기를 나타내는 N이 주어진다. (1 ≤ N ≤ 100)
•
둘째줄에 이동할 계획서 내용이 주어진다. (1 ≤ 이동 횟수 ≤ 100)
•
첫째줄에 최종적으로 도착할 지점의 좌표 x, y 를 공백으로 구분하여 출력한다.
# 상하좌우
# 주어진 공간의 제한은 x : 1 ~ n , y : 1 ~ n 이다
# R / L 이 나오면 y 값에 +1 / -1 을 해준다
# U / D 이 나오면 x 값에 -1 / +1 을 해준다.
n = int(input())
plans = input().split() # 방향에 해당하는 원소들을 리스트로 저장
x,y = 1,1
# 이동 방향에 따른 dx, dy 를 설정해주자 (인덱스 위치 동일하게 해줘야 함 주의)
way = ['L','R','U','D']
dx = [0,0,-1,1]
dy = [-1,1,0,0]
for plan in plans:
for i in range(len(way)): # 0 ~ 3
if plan == way[i]:
nx = x + dx[i]
ny = y + dy[i]
if nx < 1 or nx > n or ny < 1 or ny > n: # 바뀐 값이 범위를 벗어날 경우에는
continue # 변경 사항을 무시하고 for문으로
x,y = nx, ny # 범위를 넘어가지 않으면 변경 사항 반영.
print(x, y)
Python
복사
시각
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성해라.
# 구현 - 시각
# N이 입력되면, 00시 00분 00초부터 N시 59분 59초까지 중에서 3이 하나라도 포함되는 모든 경우의 수를 세라
### sol ###
# 1. 하루는 86400초, 데이터가 10만개도 되지 않기 때문에 단순 1초씩 증가하면서 3이 하나라도 포함되는지 확인해도 시간은 충분하다.
# 완전탐색으로 풀 경우에는 일반적으로 전체 데이터 개수가 100만개 이하일 떄 사용한다.
# 2. 문자로 변환하여 '3'이 포함되어 있는지 체크하자
n = int(input())
count = 0
for i in range(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)
Python
복사
왕실의 나이트
첫째줄에 8X8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다.(열과 행으로 이뤄진다)
첫째줄에 나이트가 이동할 수 있는 경우의 수를 출력해라.
•
ord(문자) : 문자에 해당하는 유니코드 정수를 반환한다.
ex) ord(’a’) → 97
# 왕실의 나이트
# 이동 방식은 2가지지만, 나올 수 있는 이동 가지 수는 총 8가지다.
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1 # 컬럼 'a ~ h'를 1~8 값으로 변환
# 나이트가 이동할 수 있는 방향
steps = [(-2,-1), (-1,-2), (1,-2) ,(2,-1), (2,1), (1,2), (-1,2), (-2,1)]
# 8가지 방향에 대해서 각 위치로 이동할 수 있는지 확인
count = 0
for step in steps:
# 이동하고자 하는 위치 확인
n_row = row + step[0]
n_col = column + step[1]
# 해당 위치로 이동이 가능하면 카운트를 증가
if n_row >= 1 and n_row <= 8 and n_col >= 1 and n_col <= 8:
count += 1
print(count)
Python
복사
게임 개발
•
현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 갈 곳을 정한다.
•
캐릭터의 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 한 칸 전진한다. 가보지 않은 칸이 없다면, 왼쪽 방향으로 회전만 하고 1단계로 돌아간다.
•
만약 네 방향 모두 이미 가본 칸이거나 바다로 되어 있는 칸인 경우에는, 바라보는 방향을 유지한 채로 한 칸 뒤로 가고 1단계로 돌아간다. 단, 이때 뒤쪽 방향이 바다인 칸이라 뒤로 갈 수 없는 경우에는 움직임을 멈춘다.
매뉴얼에 따라 이동시킨 뒤에, 캐릭터가 방문한 칸의 수를 출력하는 프로그램을 만들어라.
# 첫째 줄에 맵의 세로 크기 N과 가로 크기 M을 공백으로 구분하여 입력한다.
# 둘째 줄에 게임 캐릭터가 있는 칸의 좌표(A,B)와 바라보는 방향 d가 각각 서로 공백으로 구분하여 주어진다.
# 방향 d의 값은 다음과 같다.(0 : 북, 1: 동, 2: 남, 3: 서)
# 셋째줄부터 맵이 육지인지 바다인지에 대한 정보가 주어진다. N개의 줄에 맵의 상태가 북쪽부터 남쪽 순서대로, 각 줄의 데이터
# 는 서쪽부터 동쪽 순서대로 주어진다. 맵의 외곽은 항상 바다로 되어 있다.(0:육지, 1:바다)
# 처음에 캐릭터가 위치한 칸의 상태는 항상 육지다.
n, m = map(int,input().split())
# 방문한 칸인지 아닌지를 확인하기 위해 2차원 맵을 형성
d = [[0]*m for _ in range(n)] # n X m 형태의 행렬맵을 형성
x,y,dir = map(int,input().split()) # 현재 위치와 방향을 입력받기
d[x][y] = 1 # 현재 위치는 방문 처리
# 맵 정보(바다/육지) 입력받기
array = []
for i in range(n):
array.append(list(map(int,input().split())))
# 북,동,남,서 방향에 따라 정의
dx = [-1,0,1,0]
dy = [0,1,0,-1]
# 현재 위치에서 왼쪽으로 회전
def turn_left():
# 일단 바라보고 있는 방향을 변경
global dir
# 서쪽으로 돌때마다 방향값은 -1 처리를 하면 되지만, '북->서'로 갈때는 예외 처리를 해줘야 한다.
dir -= 1
if dir == -1:
dir = 3
# 이동 시뮬레이션 시작
count = 1
turn_time = 0
while True:
# 현재 위치에서 왼쪽으로 회전
turn_left()
# 이동
nx = x + dx[dir]
ny = y + dy[dir]
# 이동한 칸이 가보지 않은 칸이고, 육지이면 이동
if d[nx][ny] == 0 and array[nx][ny] == 0:
d[nx][ny] == 1 # 방문 처리
x = nx
y = ny
count += 1
turn_time = 0
continue
else: # 이동한 칸이 가본 칸이거나, 바다인 경우
turn_time += 1
if turn_time == 4: # 모든 방향이 갈 수 없을 경우 -> 한 칸 뒤로 이동
nx = x - dx[dir]
ny = y - dy[dir]
if array[nx][ny] == 0:
x = nx
y = ny
else: # 한 칸 뒤로 이동한 곳이 바다일 경우
break
turn_time = 0
print(count)
Python
복사
럭키 스트레이트
n = list(map(int,input()))
firstResult = 0
secondResult = 0
halfcnt = int(len(n) / 2)
for i in range(halfcnt):
firstResult += n[i]
for j in range(halfcnt,len(n)):
secondResult += n[j]
if firstResult == secondResult:
print('LUCKY')
else:
print('READY')
Python
복사
문자열 재정렬
•
문자값이 정수인지 확인 → isdecimal()
•
문자열 정렬은 sort() 를 쓰지 못한다.
◦
대신 sorted() 를 쓰면 된다. sorted() → 결과값 리스트 → ‘’.join() 으로 다시 문자열로 만들어주기
# 구현 - 문자열 재정렬
# 알파벳 대문자와 + 숫자(0~9)로만 구성된 문자열 입력받는다
# 알파벳은 오름차순 정렬해서 출력하고, 뒤에 모든 숫자를 더한 값을 이어서 출력한다
# isdecimal , 또는 isdigit 활용하기
s = input()
alpha = '' # 문자 더할 빈 문자열 변수
num = 0 # 숫자 더할 빈 숫자 변수 변수
for i in s:
if i.isdecimal() == False: # 문자일 경우
alpha += i
else: # 숫자일경우
num += int(i)
print(''.join(sorted(alpha)) + str(num))
Python
복사
** isalpha() / isalnum()
•
isalpha() : 주어진 문자열이 모두 알파벳으로만 이루어졌다면 True (공백도 안됨)
•
isalnum() : 주어진 문자열이 알파벳 또는 숫자로만 이루어졌다면 True (공백 안됨)
문자열 압축 - 다시!!!
# 문자열을 1개 단위로 자를 때부터 n개 단위로 자를 때까지 압축한 문자열 길이를 저장
# 최솟값을 출력
Python
복사