Algorithm

BOJ 18187 평면분할 (python)

광보기 2021. 5. 18. 20:13
반응형

BOJ 18187 평면 분할

 

문제

무한한 크기의 이차원 평면에, 여러분은 최대 N개의 직선을 그릴 수 있다.

여러분은 기울기가 -1, 0, 1인 직선만 그릴 수 있다.

직선을 이용하여 평면을 최대 몇 개의 영역으로 분할할 수 있는지 구하는 프로그램을 작성하시오.

 

입력

첫 번째 줄에 그릴 수 있는 직선의 개수의 최댓값을 의미하는 자연수 N이 주어진다.

 

출력

첫 번째 줄에 최대 몇 개의 영역으로 분할할 수 있는지 그 개수를 출력한다.

 

제한

모든 입력 데이터는 다음 조건을 만족한다.

  • 1 ≤ N ≤ 100

 

풀이과정

 

규칙을 찾기 위해 기록을 해보았다

이때 규칙을 찾을 수 있었던 것이 증가개수가 짝수일 경우에는 다음회차에 바로 증가개수의 증가

홀수일 경우에는 한번더 같은 값으로 증가하고 증가개수의 증가가 일어난다는 규칙을 찾을 수 있었다.

N 증가개수 평면 개수
1 2 2
2 3 4
3 3 7
4 4 10
5 5 14
6 5 19
7 6 24
8 7 30

정확한 증명은 없었지만 해당 규칙을 코드에 적용시켜 보았다.

 

코드

N = int(input())
# 방문 검사를 위한 변수
visited = 0
# 처음에는 면이 1개이다.
temp = 1
# 결과값 초기화
result = 1
# N만큼 규칙에 따라서 더해질 것이다.
for _ in range(N):
    # 만약 값이 짝수라면 바로 temp에서 더해준다.
    if not temp % 2:
        # 바로
        temp += 1
    else:
        # 홀수인 경우에는 두번 더해지므로 이미 한번 더해졌다면
        if visited:
            # 더할 값 증가
            temp += 1
            # 방문검사 초기화
            visited = 0
        else:
            # 더해진 적이 없다면 방문 체크만 하자
            visited = 1
    # 결과값에 더할값을 더해주자
    result += temp

print(result)

확실한 증명이나 근거는 조금 부족해보였지만 일단 적용하니 그 규칙을 따른다는 것을 알 수 있었다.

아마 더 확실하거나 좋은 방법이 존재할 것 같다.

반응형