자기개발👨‍💻/코딩 알고리즘

[c++] 백준2232 벌집 c++

천숭이 2023. 11. 2. 17:50

백준 2292벌집 : https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

#include<iostream>
using namespace std;

int main() {
	int inp = 0;
	cin >> inp;
	int a = 1;
	int answer = 0;
	int b = 2;
	if (inp == 1) {
		cout << 1;
		answer = 1;
	}
	else {
		for (int i = 2; i <= 100000000; i++) {  //조건보고 범위 잘 정하기!!
			//cout << "b " << b << " , " << "a " << 6 * a + 1 << endl;
			if (b<= inp <= 6 * a + 1) {
				//cout << "i " << i << endl;
				answer = i;
			}
		if (6*a+1 >= inp) {
			break;
		}
		b = (6 * a) + 2;
		a = a + i;
	}
	cout << answer;
	}
}

 

 

 

벌집 모양이

1

2~7

8 ~ 19

20  ~  37

38   ~   61

이런식으로 진행된다.

 

(입력이 1일경우) 1출력하고 바로 끝내기

(입력이 2 이상일 경우)

끝에 끝나는 숫자만 패턴을 찾고, 그 숫자를 a라하면

직전 a에 +1 한것과 a사이일 경우에 answer++ 해주고 멈추면서

answer을 출력해준다.

 

i의 범위를 입력조건과 맞지않게 해줘서 계속 틀렸다고 나왔었음!!

 

조건 잘 보고 코드 작성하기 ★