반응형
https://www.acmicpc.net/problem/2292
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int sum_hexagon(int _n) { //벌집의 최대값을 반환
int sum = 1;
for (int i = 0; i <= _n; i++ ) {
sum += 6 * i;
}
return sum;
}
int main() {
int a;
int i; //sum_hexagon에 입력할 값. 육각형 한 변의 점의 개수
scanf("%d", &a);
for (i = 1; !(sum_hexagon(i - 2) <= a && a <= sum_hexagon(i - 1)); i++) {
//비어있음
}
printf("%d", i);
}
문제풀이
벌집의 최대값을 반환하는 함수를 작성했습니다. 그리고 비어있는 for문을 활용해서 범위에 포함되는 i의 값을 구하고 출력했습니다.
ex) 13 입력 후 3이 출력되는 경우: 1 + 6*1 <= 13 <= 1 + 6*1 + 6*2
비고
교과서의 수학 문제에서 함수를 굉장히 많이 사용하듯이, 실생활의 수학문제를 코딩할때도 함수는 매우 중요해보입니다.
반응형
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준][c] 2869번: 달팽이는 올라가고 싶다 (0) | 2021.07.14 |
---|---|
[백준][c] 1193번: 분수찾기 (0) | 2021.07.13 |
[백준][c] 1712번: 손익분기점 (0) | 2021.07.13 |
[백준][c] 1316번: 그룹 단어 체커 (0) | 2021.07.13 |
[백준][c] 2941번: 크로아티아 알파벳 (0) | 2021.06.29 |