BOJ 2292ハニカム


質問する


BOJ 2292ハニカム
青銅II|白準2292|Python 3断面図

アルゴリズム#アルゴリズム#



絵は少し乱れていますが、想像以上に色が付きやすいです.
色を塗った六角形のグループを皮と言います.オレンジ色は1皮黄色は2皮...はい.
赤い矢印は、次のシェルの境界にまたがる2つの格子です.
1を除いて、最初のケースから白いケースを見ると
  • 2~7、各ブロック6回(2~6個)
  • 8から19各2ブロック、6番(8から12個)
  • 20から37各3ブロック6号(20から18個)
  • 38~61、4ブロックごとに6回(38~24個)
    ...
    上記のルールを見つけることができます.
  • コードとして記述するには
  • N=1は1出力(例外)
  • を表す.
  • 2から第1筐体まで、1個ずつ6回(2+(6*1)=8)
  • 増加する.
  • 8から2番目のケースまで、2ごとに6回増加(8+(6*2)=20)
    ...
  • (シェルの開始値+(シェル番号x 6))では、次のシェルの開始番号が得られます.
    数が次のシェルより小さい場合は、そのシェルに属するため、シェル番号が出力されます.

    コード#コード#

    import sys
    
    input = sys.stdin.readline
    
    N = int(input())
    
    # N == 1인 경우 예외
    if N == 1:
        print(1)
        exit(0)
    
    c = 1 # 껍질 번째 
    n = 2 # 껍질의 시작값
    while True:
        n = (n + (6 * c)) # 다음 껍질 범위 계산
    	
        # 다음 껍질보다 작으면 출력
        if N < n:
            print(c + 1)
            exit(0)
    	
        # 껍질 +1
        c += 1

    結果