728x90
( 문제 )
입력의 n, 과 불값인 clockwise가 주어집니다.
문제 설명은 아래의 그림을 참고해주세요
위의 그림처럼 n과 clockwise가 주어질 때 그림의 마지막 부분의 숫자 배열을 리턴해주는 게 출력을 원하는 문제입니다.
문제를 풀면서 여러가지 방식을 고민했지만 결론적으로 풀이에 성공한 풀이만 설명하겠습니다.
(문제 해설)
그림을 먼저 참고하시죠.
이렇게 풀이하면 좋은 점이 n이 홀수 일 때 짝수 일때 구분하지 않아도 된다는 점입니다.
짝수 일 때는 왜 될까요?라는 의문점이 드신다면 위의 그림처럼 한번 그려보시면 알 수 있습니다.
clockwise가 True, False는 구분해야 되는데 제가 False까지는 코딩하기가 귀찮아서..
그건 이걸 읽는 분들에게 맡깁니다.
아래는 코드입니다.
[ 코드 ]
def down(size, answer, idx, px):
for x in range(size):
answer[x + px][len(answer) - 1 - px] = idx
idx += 1
if x == size - 2:
return
def left(size, answer, idx, py):
for y in range(size - 1, 0, -1):
answer[len(answer) - 1 - py][y + py] = idx
idx += 1
if y == py - 1:
return
def up(size, answer, idx, px):
for x in range(size - 1, 0, -1):
# answer[len(answer) - 1 - px][y + px] = idx
answer[x + px][px] = idx
idx += 1
if x == px - 1:
return
def right(size, answer, idx, py):
for y in range(size):
answer[py][y + py] = idx
idx += 1
if y == size - 2:
return idx
def solution(n, clockwise):
answer = [[0] * n for _ in range(n)]
size = len(answer)
if clockwise:
idx = 1
px = 0
py = 0
if n % 2 != 0:
while size > 0:
# 1. (len(n), 0)
down(size, answer, idx, px)
# 2.
left(size, answer, idx, py)
# 3.
up(size, answer, idx, px)
# 4.(0, 0)
idx = right(size, answer, idx, py)
px += 1
py += 1
size -= 2
# 체크용
for i in answer:
print(i)
else:
while size > 0:
# 1. (len(n), 0)
down(size, answer, idx, px)
# 2.
left(size, answer, idx, py)
# 3.
up(size, answer, idx, px)
# 4.(0, 0)
idx = right(size, answer, idx, py)
px += 1
py += 1
size -= 2
# 체크용
for i in answer:
print(i)
return answer
n = 6
c = True
sol = solution(n, c)
후기
막상 코테를 볼 때는 함수 화하지도 않았고 위의 아이디어대로 안 풀어서
결국에는 n이 짝수 c = True일 때만 구현한 게 기억이 나네요.
중간에 풀면서 부분분을 함수 화해서 써먹아야 된다는 걸 느꼈지만
느꼈을 때는 이미 늦업스죠.. 예
다음 문제는 4번 문제와 비슷하다는 백준 등산 마니아를 풀 예정입니다.
이미 풀었지만 풀이는 내일 올릴게요 그럼 이만!
728x90
'코딩테스트 풀이 정리 > 코테1' 카테고리의 다른 글
SKT_ICT_코딩테스트 #4. 대체 문제 백준_20188_등산마니아 (0) | 2022.03.17 |
---|---|
코테 풀이를 시작하며.. (0) | 2022.03.15 |