티스토리 뷰

728x90
반응형

 백준 온라인 저지(BOJ) 25314번 코딩은 체육과목 입니다
https://www.acmicpc.net/problem/25314

 

25314번: 코딩은 체육과목 입니다

오늘은 혜아의 면접 날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. C++

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

4의 배수 N 을 입력 받고,
N 바이트 정수까지 저장할 수 있다고 생각하는 정수 자료형의 이름을 출력

 

2. 풀이

1) 문제 설명

int 형 변수는 4 byte(32 bit)까지 사용하여 정수를 저장할 수 있습니다.
(기본형으로 자주 사용하는 int 는 앞에 long 이 생략된 long int 입니다)
참고로 short (int) 는 2 byte 까지 저장 가능합니다.
그리고 기본형인 long int 에 long 을 하나 더 붙이면 long long int 인데,
long long int 는 8 byte(64 bit)까지 사용할 수 있습니다.

따라서 위 두 사례(long int, long long int)만 보면,
long 이 하나 씩 붙을 때 마다 4 byte 씩 늘어난다고 추론할 수 있습니다.

문제에서 혜아가 저지른 실수가 바로 이것이죠. (성급한 일반화의 오류)
문제 하단에도 적혀있듯 long long long int, long long long long int 와 같은 자료형은 없습니다.

2) 문제 풀이

문제 풀이는 매우 단순합니다.

4의 배수로 주어지는 숫자 N을 4로 나눈 뒤,
그 숫자만큼 "long" 과 "공백 1칸" 을 반복하여 출력합니다.
그리고 마지막에 "int" 까지 출력해주면 됩니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <cstdio>

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int n;
	scanf("%d", &n);

	n >>= 2; // n /= 4;
	for (int i = 0; i < n; ++i) printf("long ");
	printf("int\n");

	return 0;
}

* 2 ^ n 으로 나누거나 곱할 때 shift 연산자(>>, <<)를 활용해보는 것을 권장드립니다.

728x90
반응형
댓글