[C++] 백준 1606번: 침투 계획 세우기

be_clever·2022년 1월 29일
0

Baekjoon Online Judge

목록 보기
55/172

문제 링크

1606번: 침투 계획 세우기

문제 요약

육각형 타일로 이루어진 집이 있다. 이 집에서 원숭이와 멍멍이가 위치를 인식하는 방법이 다르다. 멍멍이가 위치를 인식하는 방법을 원숭이가 위치를 인식하는 방법으로 바꿔야 한다.

접근 방법

처음에는 방법이 바로 떠오르지는 않았는데, 좌표의 두 값 모두 0 이상이라는 것에 주목해서 규칙을 찾을 수 있었습니다.

입력 받은 좌표를 (x,y)(x, y)라고 할 때,
1. y가 0일 때는 원숭이 방법으로 바꾼 값이 1,7,19,37...1, 7, 19, 37... 과 같은 식으로, 수열의 차이가 6의 배수꼴이 되도록 증가하게 된다.
2. y가 0이 아닌 경우에는 (x,y)(x, y)값이 ((x+y)1,0)((x + y) - 1, 0)의 값에서 y값의 차이만큼 증가하게 된다. 즉, ((x+y)1,0)((x + y) - 1, 0)의 값에 yy를 더한 값이 된다.
((x+y)1,0)((x + y) - 1, 0)의 값은 1번 규칙으로 구할 수 있다.

이를 이용하면 쉽게 코드를 작성할 수 있습니다.

코드

#include <bits/stdc++.h>

using namespace std;

int main(void)
{
	long long x, y, res = 1;
	cin >> x >> y;
	for (long long i = 1; i < x + y + (!y ? 1 : 0); i++)
		res += 6 * i;
	cout << res + y;
	return 0;
}
profile
똑똑해지고 싶어요

0개의 댓글