Baekjoon/IM Level

[백준] 8320 직사각형을 만드는 방법 (브론즈2)

hellosonic 2023. 3. 21. 19:31

문제요약

나의 코드 및 설명

  • 이 문제의 핵심은 가로, 세로를 따로 따지는 것이 아닐까 싶다.
    세로가 1, 2, 3, 4,, 일때 가로의 길이에 따라 그려질 수 있는 도형을 그려보면, 세로가 1일 때는 모든 도형을 다 그릴 수 있다. 반면, 세로가 2일 때는 가로가 1인 도형은 제외되게 된다. 세로가 1일 때의 도형과 겹치기 때문이다. 세로가 3일 때 역시 가로가 1, 2인 도형은 제외되게 된다. 이 것을 구현해보면 다음과 같다.
  • 세로의 길이가 1~n 까지 주어질 때, 가로의 길이는 세로의 다음 길이부터 살펴보면 된다. 이 때, 가로와 세로의 곱이 n을 초과하면 안된다. n보다 같거나 작을 때마다 ans에 1씩 더해주게 되면 정답 판정을 받게 된다.
n = int(input())
ans = 0
for i in range(1, n+1): #세로
    for j in range(i, n+1): #가로
        if i*j <= n:
            ans += 1

print(ans)

피드백

규칙은 찾았지만 어떻게 구현할 수 있을지 헤맸다. 결국 다른 사람의 코드를 보게 되었는데, 이런 식으로 도형 문제가 나올 때는 세로가 1씩 증가할 때마다의 가능한 가로의 경우의 수를 분석해봐야겠다. 수열도 케이스를 나누어서 규칙을 찾아보는 습관을 길러야겠다.