728x90
반응형
4-1문제
k=int(input())
arr=[['0' for i in range (k) ]for row in range (k)]
strarr= list(map(str,input().split())) #문자열 끊어서 저장
x=0
y=0 #시작 좌표
for i in strarr:
if i=='L':
if(y==0):
continue
else:
y-=1
elif i=='R':
if(y==k-1):
continue
else:
y+=1
elif i=='U':
if(x==0):
continue
else:
x-=1
else:
if(x==k-1):
continue
else:
x+=1
print(x+1, y+1)
4-2 시각 문제
n=int(input())
count=0
##n=2라면,
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): ##nn시 jj분 kk초 꼴에서 3이 나온다면 count++함
count+=1
print(count)
##00시 00분 00초에서 1시간당 3/13/23/30~39/43/53 -> 초:
4-3 왕실의 나이트
n, m=input().strip()##strip()은 한 글자씩 끊어서 저장받음
m=int(m)
#아아부터 고고|
cnt=0
if(m+2 <= 8):
if(chr(ord(n)+1)<='h'):
cnt+=1
if(chr(ord(n)-1)>='a'):
cnt+=1
if(m-2>=1):
if(chr(ord(n)+1)<='h'):
cnt+=1
if(chr(ord(n)-1)>='a'):
cnt+=1
if(chr(ord(n)+2) <='h'):
if(m+1<=8):
cnt+=1
if(m-1>=1):
cnt+=1
if(chr(ord(n)-2) >= 'a'):
if(m+1<=8):
cnt+=1
if(m-1>=1):
cnt+=1
print(cnt)
20분 제한 문제지만 25분이 걸렸다
풀면서 4-1 상하좌우 문제와 비슷하게 풀리지 않을까? 생각했는데 일단 무작정
상상 하하 좌좌 우우씩 이동 후 다음단계 이동이 가능한지 확인하는 방식으로 풀었다.
답지의 풀이에서는 역시 steps =[ (-2,-1) , (-1,-2) .... (2,1),(1,2))] 의 8가지 이동 방향 리스트가 있었다.
**문자열에서 알파벳을 다음 알파벳혹은 이전 알파벳으로 변환하는 방법
chr(ord('a')+1) 꼴로 사용하면 b가 나온다.
chr(ord('b')-1) 꼴을 사용하면 a가 나온다.
n, m=input().strip()
m=int(m) #m은 숫자로 행
n=int(ord(n)-ord('a'))+1 ##n은 알파벳으로 열, 1으로 만들어준다.
steps=[(-2,-1),(-2,1),(2,-1),(2,1),(1,2),(1,-2),(-1,2),(-1,-2)]
cnt=0
for step in steps:
row=m+step[0]
col=n+step[1]
if(row<=8 and row>=1 and col<=8 and col>=1):cnt+=1
print(cnt)
풀이를 참고해 다시 풀어본 모습!!
상하좌우 형태의 문제에서는, dx와 dy변수가 중요하게 쓰이는 것같아서 연습해보려고 다시 풀어봤다.
4-4 게임 개발
n, m=map(int,input().split())
a, b, d=map(int, input().split())
visit=[[0 for j in range(n)]for i in range(m)]
visit[a][b]=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 d
d-=1
if(d==-1):
d=3
cnt=1
t_cnt=0
while True:
turn_left()
nx=a+dx[d]
ny=b+dy[d]
if(visit[nx][ny]==0 and array[nx][ny]==0):
visit[nx][ny]=1 ##방문체크하고
a=nx
b=ny #좌표 바꿔준다
cnt+=1 #카운트늘려준다
turn_left()
t_cnt=0
continue
else:
t_cnt+=1
if(t_cnt==4):
nx=a-dx[d]
ny=b-dy[d]
if array[nx][ny]==0:
a=nx
b=ny
else:
break
t_cnt=0
print(cnt)
어려워서 조금 고민하고 바로 답을 봤는데, 내일 다시 풀어 볼 것!!
728x90
반응형
'공부 > <이것이 코딩테스트다>' 카테고리의 다른 글
부록 A 코딩 테스트를 위한 파이썬 문법 (2) | 2022.12.25 |
---|---|
(1) 그리디 알고리즘, 탐욕적인 알고리즘 (0) | 2022.12.22 |