<1> 2745번 진법 변환
문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
예제 입력 1
ZZZZZ 36
예제 출력 1
60466175
https://www.memoengine.com/blog/c-language-pow-sqrt/
C 언어 거듭제곱(pow)과 제곱근(sqrt) 구하기
C 언어의 math.h 헤더 파일에서 제공하는 거듭제곱(pow)과 제곱근(sqrt)을 구하는 함수를 소개합니다.
www.memoengine.com
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
char N[100];
int B;
int result = 0;
int sum = 0;
scanf("%s %d", N, &B);
for (int i = 0; i < strlen(N); i++) {
if (N[i] >= 'A' && N[i] <= 'Z') {
result = N[i] - 55;
}
else if (N[i] >= '0' && N[i] <= '9') {
result = N[i] - 48;
}
sum += pow(B, strlen(N) - i - 1) * result;
}
printf("%d", sum);
return 0;
}
*아스키코드 표*
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skout123&logNo=50127493978
[스카웃 C언어 강좌] 12-1 아스키코드
[스카웃 C언어 강좌] 12-1 아스키코드 (ASCII) &nb...
blog.naver.com
'0' = 48
'A' = 65
'a' = 97
'space' = 32
<2> 11005번 진법 변환 2
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
예제 입력 1 복사
60466175 36
예제 출력 1 복사
ZZZZZ
#include <stdio.h>
#include <string.h>
int main(void) {
int B;
long N;
int re, quo;
char result[100] = {'0', };
scanf("%ld %d", &N, &B);
int count = 0;
quo = N;
for (int i=0; ;i++){
re = quo % B;
quo = quo / B;
if (re >= 10 && re <= 35) {
result[i] = re + 55;
}
else if (re >= 0 && re <= 9) {
result[i] = re + 48;
}
count++;
if (quo == 0) break;
}
for (int i = 0;i < count; i++){
printf("%c", result[count - 1 - i]);
}
return 0;
}
<3> 2720번 세탁소 사장 동혁
문제
미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.
동혁이는 리암에게 실망했다. 리암은 거스름돈을 주는 것을 자꾸 실수한다. 심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다! 어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.
거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1<=C<=500)
출력
각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.
예제 입력 1 복사
3
124
25
194
예제 출력 1 복사
4 2 0 4
1 0 0 0
7 1 1 4
#include <stdio.h>
#include <string.h>
int main(void) {
int a, b, e, d;
int t, c;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
scanf("%d", &c);
a = c / 25;
b = (c % 25) / 10;
e = (c % 25) % 10 / 5;
d = (((c % 25) % 10) % 5) / 1;
printf("%d %d %d %d\n", a, b, e, d);
}
return 0;
}
<4> 2903번 중앙 이동 알고리즘
문제
상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.
외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.
알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.
- 정사각형의 각 변의 중앙에 점을 하나 추가한다.
- 정사각형의 중심에 점을 하나 추가한다.
초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.
아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다.
초기 상태 - 점 4개 | 1번 - 점 9개 | 2번 - 25개 |
상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 15)
출력
첫째 줄에 과정을 N번 거친 후 점의 수를 출력한다.
예제 입력 1
1
예제 출력 1
9
예제 입력 2
2
예제 출력 2
25
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int n;
int a = 2;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
a = a + (a - 1);
}
int result = pow(a, 2);
printf("%d", result);
return 0;
}
<5> 2292 벌집
문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1
13
예제 출력 1
3
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int n;
scanf("%d", &n);
if (n == 1) printf("1");
else {
int cnt = 1;
int sum = 1;
for (int i = 1; ; i++) {
cnt++;
sum += 6 * i;
if (sum >= n) break;
}
printf("%d", cnt);
}
return 0;
}
**
https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170
데이터 형식 범위
자세한 정보: 데이터 형식 범위
learn.microsoft.com
<5> - <6> 아이디어 긁적 긁적...
<6> 1193번 분수찾기
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … |
2/1 | 2/2 | 2/3 | 2/4 | … | … |
3/1 | 3/2 | 3/3 | … | … | … |
4/1 | 4/2 | … | … | … | … |
5/1 | … | … | … | … | … |
… | … | … | … | … | … |
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
예제 입력
9
예제 출력
3/2
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
long x;
scanf("%ld", &x);
int cnt = 0;
long sum = 0;
for (int i = 1;;i++) {
sum += i;
cnt++;
if (x <= sum) break;
}
long check = sum - x;
if (cnt%2 == 1) printf("%d/%d", check + 1, cnt - check);
else if (cnt % 2 == 0)printf("%d/%d", cnt - check, check + 1);
return 0;
}
<7> 2869번 달팽이는 올라가고 싶다
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1 복사
2 1 5
예제 출력 1 복사
4
예제 입력 2 복사
5 1 6
예제 출력 2 복사
2
예제 입력 3 복사
100 99 1000000000
예제 출력 3 복사
999999901
#include <stdio.h>
#include <string.h>
int main(void) {
int a, b, c;
int result=0;
int count = 0;
scanf("%d %d %d", &a, &b, &c);
if ((c - a) % (a - b) != 0) {
result = (c - a) / (a - b) + 2;
}
else result = (c - a) / (a - b) + 1;
printf("%d", result);
return 0; }
'AI HW study > Baekjoon' 카테고리의 다른 글
백준을 1년 반만에 다시 풀어보자! (0) | 2025.01.17 |
---|---|
백준 6단계 : 심화 1 (0) | 2023.07.19 |
백준 9단계: 약수, 배수와 소수 (0) | 2023.07.18 |
백준 5단계 문자열 (0) | 2023.07.15 |
백준 5단계 문자열 개념 정리 (0) | 2023.07.15 |