문제요약
나의 코드 및 설명
- 이 문제의 핵심은 가로, 세로를 따로 따지는 것이 아닐까 싶다.
세로가 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씩 증가할 때마다의 가능한 가로의 경우의 수를 분석해봐야겠다. 수열도 케이스를 나누어서 규칙을 찾아보는 습관을 길러야겠다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 17413 단어 뒤집기2 (실버3) / 스택, isalnum(), join(), split() 함수 (0) | 2023.03.23 |
---|---|
[백준] 9655 돌 게임 (실버5) / DP(다이나믹 프로그래밍) (0) | 2023.03.23 |
[백준] 2980 도로와 신호등 (실버4) (0) | 2023.03.21 |
[백준] 9093 단어 뒤집기 (브론즈1) (0) | 2023.03.21 |
[백준] 2292 벌집 (브론즈2) (0) | 2023.03.21 |