728x90
문제
M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다.
위의 그림은 M=5, N=3의 예이다. 이제 표의 왼쪽 위 칸(ㅇ)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 그려진 칸에 닿아서 더 이상 이동할 수 없게 되면, 시계방향으로 선을 꺾어서 그려나간다.
위의 표는 선을 그려 나간 모양을 나타낸 것이다. 선이 꺾어진 부분은 대각선으로 나타내었다. 표의 모든 칸이 채워질 때까지, 선을 몇 번 꺾게 될까?
https://www.acmicpc.net/problem/1952
입력
첫째 줄에 M과 N이 빈 칸을 사이에 두고 주어진다. (2 ≤ M, N ≤ 100)
출력
첫째 줄에 표의 모든 칸이 채워질 때까지 선이 꺾어지는 횟수를 출력한다.
예제
# input
5 3
# output
5
문제 풀이
규칙 찾기
M | N | M > N | answer |
2 | 2 | No | 2 |
3 | 2 | Yes | 3 |
2 | 3 | No | 2 |
3 | 3 | No | 4 |
4 | 2 | Yes | 3 |
4 | 3 | Yes | 5 |
4 | 4 | No | 6 |
2 | 4 | No | 2 |
3 | 4 | No | 4 |
두 입력 값 m과 n 중 더 작은 값에 기반하여 다음과 같은 규칙으로 계산됩니다.
M > N인 경우: answer = 2 * N - 1
M <= N인 경우: answer = 2 * M - 2
이를 코드로 표현하면 다음과 같습니다.
M, N = map(int, input().split())
if M > N:
print(2 * N - 1)
else:
print(2 * M - 2)
M, N = map(int, input().split())
# M이 N보다 작거나 같으면 True로 1을 빼고, False일 경우 0을 뺌
print(2 * min(M, N) - 1 - (M <= N))
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90