위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1
13
예제 출력 1
3
k = int(input())
n = 1
v = 1
while v < k :
v+= 6*n
n+=1
print(n)
k = int(input())
n = 1
v = 1
if k==1 :
print(1)
else :
while v < k :
v+= 6*n
n+=1
print(n)
이렇게 그룹을 나누고 몇번째 그룹이니!? (1은 1번 그룹) 이것만 알면 되는 거였다..
그룹은 어떻게 나뉘냐면
1 (그룹1) - 1개
2-7 (그룹2) - 6개
8-19 (그룹3) - 12개
20-37 (그룹4) - 18개
이런식으로 6의 배수만큼 그룹원이 늘어나게 된다
이를 누적해나가면서 입력받은 숫자가 어디에 속하는지만 판별해주면 됨
- 오랜만에 알고리즘 문제를 풀었더니 입력받는 것도 기억이 잘 안나서..
- 입력받고 바로 정수로 변환해버리기
a, b = map(int, input()).split())
map
람다함수
plus_two = lambda x : x+2
print(plus_two(넣을 값))
def plus_one(x) :
return x+1
a=[1,2,3]
print(list(map(plus_one, a))
=> a 라는 배열이 plus_one의 영향을 받게 map 화 시켜주고 이를 다시 list 화
=> 람다 활용 시
a=[1,2,3]
print(list(map(lambda x : x+1 , a))
더욱 간결하게 가능