업데이트:


오늘의 추가 문제는 🚀 백준 1959번: 달팽이3 이다.

2번이랑 내용이 똑같네! 이러면서 덤볐다가

image

input을 보고.. 이것은… 일반적인 구현방법으로 절대 풀수 없다는 걸 깨달았다. 흑.

왠지 정답률 퍼센티지가 낮더라..




테스트케이스 이해하기

image

달팽이 2랑 비슷한데, 어디서 끝나는지 좌표까지 프린트 해야한다!



알고리즘

이건 규칙을 찾고 수학적으로 풀어야 한다고 생각을 했기 때문에, 여러 방법을 시도했지만 모두 실패하였다…

그래서 이번에도 인강을 듣고.. 해결하였다!

달팽이3

  1. 제일 안쪽에 있는 층을 제외하고는 각 층마다 방향이 바뀌는 부분은 총 4곳이다.
  2. 레이어가 한 층씩 들어갈 갈수록 n,m의 크기는 -2씩 작아진다.
  3. 마지막 레이어는 n이나 m이 1 or 2 가 되는 경우이다.
  4. 3번의 경우에 아래와 같이 총 4가지 경우가 나온다. 각 경우마다 필요한 값들을 계산해주면 된다!

image



정답코드

n,m = map(int, input().split())
count = result= 0

while n>2 and m>2:
    n -=2
    m -=2
    count +=1
    result += 4

x = y = count+1

#아래 처럼 하면 for문을 돌리지 않아도 되서 시간을 단축할 수 있다. 
# d = (min(n, m) - 1) // 2
# ans = 4*d
# row = 1+d
# col = 1+d
# n -= 2*d
# m -= 2*d

if n == 1:
    y += (m-1)

elif m == 1:
    result +=1
    x +=( n-1)

elif n == 2:
    result += 2
    x +=1

elif m == 2:
    result +=3
    x +=1



print(result)
print(x,y)



🚀Reference: 백준 1959번 -  달팽이3


카테고리:

업데이트: