티스토리 뷰

이제 아는 언어도 좀 있겠다, 인턴/취준을 좀 해보겠다고 알고리즘 문제를 풀어나가다 보면 백이면 백 구글에 다시 찾아보는 개념이 자료형이다. 너무나도 쉬운 문제라고 생각해서 풀었는데 런타임 에러가 생긴다던지, 틀릴 이유가 없는데 모든 테스트 케이스가 통과를 못한다던지. 뭐지…? 하다가 밑에 달린 댓글을 보거나, 도저히 안되겠어서 풀이를 검색해보면 '풀이'가 문제가 아니라 답을 담던 그릇이 잘못 된 경우가 허다하다. 물론 문제를 풀 때 처음부터 주어지는 input 값의 크기를 제대로 보는게 제일 중요하지만 또 멍청이 같이 똑같은 실수를 했을 미래의 나를 위해 쓴다.

자료형 중에 막 __int32, __int64 뭐 이런게 있는데 호환되는 일반자료형(이렇게 표현해도 되는건가)이 존재하니까 그냥 쓰던 자료형, 아는 자료형만 소개하려고 한다.

[문자형] 자료형 크기 범위
char 1 byte -128 ~ 128
unsigned char 1byte 0 ~ 255
[정수형] 자료형 크기 범위
(signed) short (int) 2 byte -32,768 ~ 32,767
unsigned short (int) 4 byte 0 ~ 65,535
(signed) int 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned int 4 byte 0 ~ 4,294,967,295
(signed) long (int) 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned long (int) 4 byte 0 ~ 4,294,967,295
bool 1 byte 0 ~ 1

기본적으로 이런데 가령 이런문제가 있다고 해보자. 문제를 직저 보실 분들은 SW Expert Academy 8016. 홀수 피라미드 링크를 따라가시고 귀찮으신 분들은 아래 글을 읽으시면 된다.

더보기

경표는 아래와 같이 삼각형 모양으로 숫자를 쌓기로 했다. 1층에는 1개, 2층에는 3개, 3층에는 5개, ...와 같이 쌓는다. 아래와 같이 경표가 끝도 없이 피라미드를 쌓을 때, N층의 제일 왼쪽, 오른쪽에 쓰게 될 숫자가 무엇일지 예측해보자.

[입력] 첫번째 줄에는 테스트 케이스의 수 T가 주어지고 각 테스트 케이스의 첫번째 줄에는 층의 번호 N(1 ≤ N ≤ 10^9)이 주어진다.

이 문제에 대한 풀이를 따로 올리려고 했으나 그냥 여기서 풀어야겠다. 어쨌든 피라미드 모양으로 쌓아올린 이 수열들은 홀수라서 공차가 2라지만 공차가 1인 연속된 자연수의 나열로 바꾸어 나타내어도 2*n - 1 이라는 식으로 바꿀 수 있으니 일단 알아보기 쉽게 연속된 자연수로 나타내 보면 아래와 같다.

먼저 오른쪽 피라미드에 관한 규칙을 찾아보자면 N번째 층에 첫번째로 나오는 숫자는 2*N*N - 4*N + 3이고 끝에 나오는 수는 여기에 2*(N-1)을 더한 수이다. 이렇게 관계를 찾는 것은 어렵지 않지만 이 문제가 말썽이었던 이유는 N이 최대로 주어질 때가 10의 9제곱이라는 사실을 확인 안한 내 잘못. 10의 9제곱을 인풋으로 주었을 때 답으로 나올 수는 그 제곱수이니 위에서 알아본 정수형 자료형으로는 턱없이 부족하다. 이럴 때 쓸만한 정수형 자료형은 unsigned long long int. 왜냐면 범위가 0~18,446,744,073,709,551,615로 매우 크기 때문에ㅋㅋㅋ

[실수형] 자료형 크기 범위
float 4 byte 3.4E-38 - 3.4E+38
(long) double 8 byte  1.79E-308 - 1.79E+308

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함