[백준|C++] 2292: 벌집

2021. 9. 1. 00:42·Problem Solving/백준
반응형
문제

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

 

2292번: 벌집

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

www.acmicpc.net

 

 

코드
#include<iostream>
using namespace std;

int main() {

	int room;
	int sum = 1;	//방 갯수 누적 합(no.1은 미리 카운트)
	int n = 2;	//거치는 방의 갯수(no.1은 미리 카운트)
	int cnt = 1;	//더한 수의 갯수(1은 미리 카운트해준다.)
	cin >> room;

	//입력받은 방 번호보다 누적 합이 커지면 반복문 종료
	while (sum < room) {	
		sum += (n - 1) * 6;
		n++;	
		cnt++;
	}

	cout << cnt;
	return 0;
}

 

 

코드 설명

출처: 백준 온라인 저지

알아보기 쉽도록 사진에 색을 입혀 패턴을 확인해 본다.

no 방 번호 방 갯수 거치는 방의 갯수
1 1 1 1
2 2 3 4 5 6 7 6 2
3 8 9 10 11 12 13 14 15 16 17 18 19 12 3
4 20 21 22 23 24 25 26 ... 36 37 18 4
5 38 39 40 41 42 43 44 45 46 ... 60 61 24 5

방의 갯수 = (거치는 방의 갯수 - 1) * 6 

(no. 1은 방의 시작점이므로 제외)

 

이 문제에서 요구하는 것은 거치는 방의 갯수이다. 

만약 사용자가 43을 입력했다면, 43이 되기 위해서는 1 + 6 + 12 + 18 + 6이 필요하다.

해당 식의 덧셈연산을 수행한 숫자의 갯수가 바로 거치는 방의 갯수이다. 

 

이를 코드로 구현해 보면,

int room;
int sum = 1;
int n = 2;
int cnt = 1;

int room ☞  사용자에게 입력받을 방의 갯수

int sum = 1 ☞  방 갯수 누적 합(no.1은 미리 카운트)
int n = 2  ☞  거치는 방의 갯수(no.1은 미리 카운트)
int cnt = 1 ☞  더한 수의 갯수(1은 미리 카운트해준다.)

 

while (sum < room) {	
		sum += (n - 1) * 6;
		n++;	
		cnt++;
	}
	cout << cnt;

사용자에게 입력받은 방 번호가 누적 합보다 커지면 반복문을 종료한다. 

만약 사용자가 room에 43을 입력했다면, 누적합 계산은 43보다 작을 때까지 반복.

☞  sum = 1(sum기본 값) (반복문 시작)+ 6 + 12 + 18 + 24 = 61 (반복문 4회 진행 후 종료)

(반복문 다섯 번째 진행 시도 -> room(43)보다 sum(61)이 더 큰 수이므로 while문 종료)

☞  n = 2(기본 값) → (반복문 시작)3 → 4 → 5 → 6

☞  cnt = 1(기본 값) → (반복문 시작)2 → 3 → 4 → 5

   

반복문을 벗어났을 때의 변수값들

 

 

마무리

한 시간 동안 고민하던 걸 디버깅 한번으로 해결.

역시 갓디버깅...

비주얼 스튜디오 디버깅에도 익숙해지자.

 

 

↓디버깅 사용법 참고한 블로그

https://zapiro.tistory.com/entry/Visual-Studio-%EB%94%94%EB%B2%84%EA%B1%B0-%EC%82%AC%EC%9A%A9%EB%B2%95

 

Visual Studio 디버거 사용법 (Debugging)

오늘은 Visual Studio의 디버거 사용법을 익혀 보도록 해요 *디버깅(Debugging)이란? 디버깅 [ debugging ] 오류 수정. 컴퓨터 프로그램의 잘못을 찾아내고 고치는 작업. 일단 작성된 프로그램들이 정확한

zapiro.tistory.com


 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > 백준' 카테고리의 다른 글

[백준|C++] 2750: 수 정렬하기  (0) 2021.09.10
[백준|C++] 2869: 달팽이는 올라가고 싶다  (0) 2021.09.02
[백준|C++] 10250: ACM 호텔  (1) 2021.09.01
[백준|C++] 1712: 손익분기점  (0) 2021.08.31
[백준|자바] 5622: 다이얼  (0) 2021.08.28
[백준|자바] 2908: 상수  (0) 2021.08.28
'Problem Solving/백준' 카테고리의 다른 글
  • [백준|C++] 2869: 달팽이는 올라가고 싶다
  • [백준|C++] 10250: ACM 호텔
  • [백준|C++] 1712: 손익분기점
  • [백준|자바] 5622: 다이얼
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    포트폴리오
    Til
    ZeroCho
    구현
    타입스크립트
    뉴렉처
    강의내용정리
    Next.js
    백준
    프로그래머스
    프로젝트
    컴퓨터네트워크
    클론 프로젝트
    웹사이트
    SWEA
    파이썬
    자바스크립트
    spring boot
    Jiraynor Programming
    d3
    블로그 제작
    AWS
    알고리즘
    공식문서
    bfs
    React
    mysql
    플러터
    자바
    리액트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[백준|C++] 2292: 벌집
상단으로

티스토리툴바