시뮬레이션 구현
1. 상하좌우
- 첫째 줄에 공간의 크기를 나타내는 n이 주어진다.
- 둘째 줄에 여행가 a가 이동할 계획서 내용이 주어진다.
- 첫째줄에 여행가 a가 최종적으로 도착할 지점의 좌표(x,y)를 공백으로 구분하여 출력한다.
- 입력예시: 5
R R R U D
- 출력예시: 3 4
단순한 접근으로 푼 나의 풀이
# 나의 풀이
n = int(input())
plans = input().split()
# plans = R R R U D
x,y = 1,1
for plan in plans:
if plan == 'L':
if y == 1: # 이동할 수 없으면 무시
y += 0
else:
y -= 1 # 그렇지않으면 이동
elif plan == 'R':
if y < n:
y += 1
else:
y += 0
elif plan == 'U':
if x == 1:
x += 0
else:
x -= 1
elif plan == 'D':
if x < n:
x +=1
else:
x += 0
print(x,y)
코드가 정돈된 느낌없이 직관적으로 갖다 붙힌 느낌
반면 책에서 제시한 깔끔한 풀이
# 예시답안
n = int(input())
x,y = 1,1
plans = input().split()
move_types = ['L','R','U','D']
dx = [0,0,-1,1]
dy = [-1,1,0,0]
# 리스트로 각각 받아서 반복문으로 매칭시키는 걸 잘 봐두기
for plan in plans: # plan 하나씩 꺼내기
for i in range(len(move_types)): # 꺼낸 plan 이동방법과 매칭시키기
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
# n*n범위를 넘어가면 실행 건너뛰기
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
x, y = nx, ny
print(x,y)
2. 시각
- 룰 : 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지
모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램 작성하기
- 입력예시 : 5
- 출력예시 : 11475
처음부터 문제를 잘못 파악해서 다시 고쳤으나 결국 풀지 못한 나의 풀이법
# 나의 풀이법 GG
N = int(input())
if N == 3 or N ==13 or N == 23:
x = list(range(3))
y = [3]
elif 0<=N<3 or 3<N<10:
x = [0]
y =list(range(N))
elif 10<=N<13 or 13<N<20:
x = [1]
y = list(range(10))
else:
x = [2]
y = list(range(4))
a = list(range(6))
b = list(range(10))
c = list(range(6))
d = list(range(10))
print(x)
print(y)
print(a)
print(b)
print(c)
print(d)
count=0
for h in x:
for g in y:
for i in a:
for j in b:
for k in c:
for l in d:
if g == 3 or h==3 or i == 3 or j ==3 or k ==3 or l ==3 :
count +=1
print(count)
이중 삼중 사중 포문이 아주 환상적인 모습이다 ^ㅡ^
책에서 나온 심플하고 간단한 풀이법
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)
그냥 문자열로 바꿔서 더해 000000 부터 N0000까지 모든 수를 카운트 하면 되는거였다 하하