//2745
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
**
진법 B가 15이고, N이 BAA라고 가정했을때.
BAA = 11, 10, 10이므로 11 * (15^2) + 10 * (15^1) + 10 * (15^0) 이 되어서 2635가 정답이다.
string[] input = Console.ReadLine().Split(' ');
string num = input[0];
int baseValue = int.Parse(input[1]);
long answer = 0;
for (int i = 0;i < input[0].Length; i++)
{
char curChar = num[i];
int numericValue;
if (char.IsDigit(curChar))
numericValue = curChar - '0';
else
numericValue = curChar - 55;
answer += numericValue * (long)Math.Pow(baseValue, num.Length - i - 1);
}
Console.WriteLine(answer);
//11005
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
string[] input = Console.ReadLine().Split(' ');
int num = int.Parse(input[0]);
int baseValue = int.Parse(input[1]);
string answer = string.Empty;
while (num > 0)
{
int temp = num % baseValue;
if (0 <= temp && temp <= 9)
answer += (char)(temp + '0');
else
answer += (char)(temp - 10 + 'A');
num /= baseValue;
}
Console.WriteLine(new string(answer.Reverse().ToArray()));
//2720
거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.
var input = int.Parse(Console.ReadLine());
for (int i = 0; i < input; i++)
{
var money = int.Parse(Console.ReadLine());
int a = money / 25; money %= 25;
int b = money / 10; money %= 10;
int c = money / 5; money %= 5;
Console.WriteLine($"{a} {b} {c} {money}");
}
//2903
알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.
- 정사각형의 각 변의 중앙에 점을 하나 추가한다.
- 정사각형의 중심에 점을 하나 추가한다.
초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.
아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.
var input = int.Parse(Console.ReadLine());
int baseDot = 2;
while (input > 0)
{
baseDot = baseDot * 2 - 1;
input--;
}
Console.WriteLine(baseDot * baseDot);
//2292
그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
등비수열이란 각 항이 이전 항과 일정한 비율을 가지는 수열이며, 등비수열을 통해 풀이하는 문제이다.
var input = int.Parse(Console.ReadLine());
int answer = 0;
for (int sum = 2; sum <= input; answer++)
sum += answer * 6;
if(input == 1) answer = 1;
Console.WriteLine(answer);
int n=int.Parse(Console.ReadLine()),k=1;
while(1+3*(k-1)*k<n)k++;
Console.Write(k);
//1193
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
var input = int.Parse(Console.ReadLine());
int i = 1;
while (input > i)
{
//i를 1씩 증가하며 input에서 차감하여 input이 몇번째 대각선에 속해있는지 구해줌
input -= i;
i++;
}
if(i%2 == 1) //홀수일때
Console.WriteLine(new string((i + 1 - input) + "/" + input));
else //짝수일때
Console.WriteLine(new string(input + "/" + (i + 1 - input)));
//2869
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
**일차 부등식을 활용한다.
***Math.Ceiling() 메소드의 경우 올림해주는 기능을 수행한다.
string[] input = Console.ReadLine().Split(' ');
var a = int.Parse(input[0]);
var b = int.Parse(input[1]);
var v = int.Parse(input[2]);
int day = (int)Math.Ceiling((double)(v - b) / (a - b));
Console.WriteLine(day);
'코딩 공부 > C#-코딩테스트' 카테고리의 다른 글
(백준/C#) 약수, 배수와 소수 (0) | 2024.10.04 |
---|---|
(백준/C#) 2차원 배열 (0) | 2024.09.30 |
(백준/C#) 심화 1 (0) | 2024.09.23 |
(백준/C#) 문자열 (0) | 2024.09.09 |
(백준/C#) 1차원 배열 (0) | 2024.08.19 |