Notice
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 리눅스
- 리액트
- 백준
- 어셈블리어
- 보안
- 해킹
- 인공지능
- 워게임
- 리버싱 워게임
- MySQL
- writeup
- 웹
- 자바스크립트
- 머신러닝
- CodeEngn
- webhacking
- 웹해킹
- 리버싱
- 넘파이
- 컴퓨터 구조
- 백준 알고리즘
- 알고리즘
- php
- C언어
- 회귀 수식
- sql injection
- webhacking.kr
- html
- abex crackme
- 리버싱 문제
Archives
- Today
- Total
인공지능 개발일지
백준 2292 벌집 C++ 본문
728x90
블하~ 안녕하세요. 오랜만에 글을 쓰는데 요즘 업로드가 뜸했던 것 같습니다.
지난 1학기 동안 생각지 못한 많은 걸 연구실에서 배운 것 같아 감사하게 생각하고 있습니다.
그래서 제가 블로그에 공유할거리들이 쌓여 있는데 제가 게을러서 요즘 잘 안 올렸네요.
앞으로는 더 꾸준하게 올려야겠습니다.
서론이 길었는데 오늘 제가 푼 문제는 백준 2292 벌집 문제입니다.
https://www.acmicpc.net/problem/2292
우선 이 문제는 아래 벌집의 1이 적혀 있는 칸에서 시작해서 임의의 값이 들어왔을 때 그 값까지 몇 칸을 지나야 하는지 구하는 문제입니다.
풀이
이 문제는 벌집의 숫자가 주어졌을 때 그 숫자까지 가는데 몇 개의 방을 지나는지 구하는 문제입니다.
이 문제의 패턴은 아래와 같이 정리할 수 있습니다.
라인의 수 | 값 | 개수 | 이전 끝자리와 차이 |
1 | 1 | 1 | x |
2 | 2~7 | 6 | +6 |
3 | 8~19 | 12 | +12 |
4 | 20-37 | 18 | +18 |
5 | 38~61 | 24 | +24 |
6 | 62-91 | 30 | +30 |
그럼 이제 위 패턴에서 마지막자리를 기준으로 입력받은 수가 마지막 자리보다 작으면 그 줄에 속하므로 그 줄을 출력하고 그 줄보다 크면 다음 줄로 끝자리 변수를 (라인의 개수)*6으로 더해주면서 무한루프를 돌리면 벌꿀집이 해당하는 곳에서 멈춰서 출력하게 됩니다.
그래서 코드는 아래와 같이 됩니다!
#include <iostream>
using namespace std;
int main() {
int endValue = 1; // 벌꿀집 라인별 마지막 수를 기록할 변수
int inputValue=0; // 입력 받은 값
int line = 1; // 몇 번째 줄인지 기록할 변수;
cin >> inputValue;
while (1) {
// 입력 받은 수가 줄의 마지막 수보다 작거나 같으면
if (endValue >= inputValue) {
// 그 라인에 있는 것으로 해석해
cout << line << '\n';
break;
}
// 입력 받은 수가 줄의 마지막 수보다 크다면 해당 라인보다 큰 줄에 있는걸로 해석해서
else {
endValue += line*6; // 줄의 마지막 수에 증가량을 더해 다음줄의 마지막 수 표현
line += 1; // 그리고 다음 줄로 넘어감
}
}
return 0;
}
728x90
'개발 지식 > 알고리즘' 카테고리의 다른 글
[알고리즘] 최빈값 구하는 알고리즘 (직접 구현/Counter 클래스로 구하는 법) - Python (0) | 2023.02.06 |
---|---|
[알고리즘] 에라토스테네스의 체 알고리즘 - Python(백준 2581) (0) | 2023.02.02 |
[백준 알고리즘 1712] 손익분기점 (Python) (0) | 2022.05.29 |
[백준 알고리즘 1065] 한수 구하기 (Python) (0) | 2022.05.27 |
[백준 알고리즘 4673] 셀프 넘버 (Python) (0) | 2022.05.26 |