코딩테스트 & 문제 풀이

[C]백준_2292 : 벌집

2023. 4. 28. 00:47

2022년 7월 6일에 작성됨

 

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

 

 

 

문제 분석

 

벌집의 중앙인 1을 중심으로 주위에 방이 몇 개씩 생성되는지를 파악해보고, 최소 몇 개의 방을 지나가는지 구해본다. 1은 1개의 방, 2~7은 2개의 방, 8~19는 3개의 방, 20~37은 4개의 방 . . . 을 지나간다.

 

 

소스 코드 (⭕)

#include <stdio.h>

int main(void)
{
    int n, i = 2, j = 5, cnt = 2;

    scanf("%d", &n);

    if (n == 1)     // 1인 경우 1을 출력
    {
        printf("%d", 1);
        return 0;
    }
    while (1)       // 무한 반복문
    {
        if (i <= n && i + j >= n) 
        {
            printf("%d", cnt);
            break;
        }
        i = i + j + 1;
        j += 6;
        cnt++;
    }
    return 0;
}

 

코드 분석

1은 규칙에 맞지 않으므로 먼저 예외 처리를 해준다. if 문을 사용하여 1을 입력했을 때 1을 출력한다.

 

  • i는 각 방에 해당하는 수의 범위에서 첫 번째로 시작하는 수이다.
  • j는 각 방에 대한 범위로, 해당하는 수의 첫 번째 수와 마지막 수를 뺀 값이다.
  • cnt는 최종적으로 구해야 하는 최소로 지나가는 방 개수이다.

일단 1번 방은 예외 처리를 해주었으므로 2번 방부터 시작하도록 변수 값을 설정해준다.

 

2번 방에서는 i=2, j=5, cnt=2 이므로 이와 같이 변수를 초기화 해주고, while 문으로 넘어가서 살펴보자.

 

if문 조건식인 i <= n && i + j >= n은 해당하는 수 사이에 n값이 있는지 판단하는 식이다.
참이라면 그때의 cnt값을 출력하고, 거짓이라면 각각의 값을 다음 방에 맞게 값을 더해주어 다시 n이 범위에 들어가는지 판단하는 과정을 반복한다.

예를 들어 n=12이면,
n = 12
i = 2
j = 5
cnt = 2

if( 2 <= 12 && 7 >= 12) <- 2번 방의 범위에 n이 포함되어 있는지 판단 (거짓)

3번 방의 i, j, cnt 값 설정
i = 2 + 5 + 1 = 8
j = 5 + 6 = 11
cnt = 2 + 1 = 3

if( 8 <= 12 && 19 >= 12) <- 3번 방의 범위에 n이 포함되어 있는지 판단 (참)
따라서 cnt = 3 출력

 

 

 

end

역시나 혼자 풀기엔 아직 어렵다... 코드만 보면 간단해 보이는데 규칙을 찾고 식으로 만들어 보는게 어려웠다.

 

 

 

'코딩테스트 & 문제 풀이' 카테고리의 다른 글

[C]코드업_1097 : [기초-2차원배열] 바둑알 십자 뒤집기  (0) 2023.04.30
[C]코드업_1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기  (0) 2023.04.29
[C]백준_10250 : ACM 호텔  (0) 2023.04.27
[C]백준_2775 : 부녀회장이 될테야  (0) 2023.04.26
[C]코드업_1095 : [기초-1차원배열] 이상한 출석 번호 부르기3  (1) 2023.04.25
  1. 문제 분석
  2. 소스 코드 (⭕)
  3. 코드 분석
  4. end
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
  • [C]코드업_1097 : [기초-2차원배열] 바둑알 십자 뒤집기
  • [C]코드업_1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기
  • [C]백준_10250 : ACM 호텔
  • [C]백준_2775 : 부녀회장이 될테야
Hicecream
Hicecream
Hicecream
Hicecream
Hicecream
전체
오늘
어제
  • 분류 전체보기 (202)
    • 코딩테스트 & 문제 풀이 (159)
    • 동아리 활동 (8)
    • 외부 활동 (0)
    • 대학 과제 (3)
    • Git & Git Hub (5)
    • 코딩 프로젝트 (4)
    • 공부 메모 (17)
    • 일상 (2)
    • 참고사항 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Bronze 3
  • python
  • C
  • Silver 5
  • 정렬
  • programmers
  • LV1
  • Silver 4
  • Bronze 4
  • 사칙연산
  • 문자열
  • Code up
  • 수학
  • Bronze 1
  • C언어 기초 100제
  • Java
  • BOJ
  • 구현
  • Bronze 5
  • Bronze 2

최근 댓글

최근 글

hELLO · Designed By 정상우.
Hicecream
[C]백준_2292 : 벌집
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.