1. 문제 상세
https://www.acmicpc.net/problem/2292
2. 문제 접근
중간부터 원하는 주소의 방까지 몇 개의 방을 거쳐야 하는지 구하자.
이번에는 규칙을 찾고 원하는 결과를 얻었을 때(주소에 도착)반복 횟수를 출력하면 된다.
첫 번째 방을 모두 둘러 쌀 경우 방이 6개 증가한다.
그 다음 다시 방을 모두 둘러 쌀 경우 방이 12개 증가한다.
이렇게 바깥쪽으로 방들이 한 줄 늘어 날 때 마다 방이 6의 배수씩 더해진다.
즉 1 + 6의 배수 작업을 몇 번 반복했을 때 주소값보다 커지는지를 확인하여 반복 횟수를 출력하면 된다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int n, i, address = 1;
cin >> n;
for(i = 1; address < n; i++) {
address += 6 * i;
}
cout << i << endl;
}
정수 n, i, address 를 선언하고 address 를 1로 초기화한다.
cin 으로 정수(주소)를 입력받아 n 에 저장한다.
for문으로 i 가 1부터 address 가 n 보다 작을 때 i 에 1씩 더하며 반복한다
반복에서는 address 에 6에 i 를 곱한 값을 더해준다.
반복이 끝나면 i 값을 출력한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 일반 수학 1' 카테고리의 다른 글
[백준] 2869번 : 달팽이는 올라가고 싶다 | C++ (0) | 2023.10.18 |
---|---|
[백준] 1193번 : 분수찾기 | C++ (0) | 2023.10.18 |
[백준] 2903번 : 중앙 이동 알고리즘 | C++ (0) | 2023.10.18 |
[백준] 2720번 : 세탁소 사장 동혁 | C++ (0) | 2023.10.18 |
[백준] 11005번 : 진법 변환 2 | C++ (0) | 2023.10.13 |