코딩 공부/C#-코딩테스트

(백준/C#) 일반 수학 1

공부를 함 2024. 9. 24. 20:52

//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개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.

  1. 정사각형의 각 변의 중앙에 점을 하나 추가한다.
  2. 정사각형의 중심에 점을 하나 추가한다.

초기 상태에서 위와 같은 과정을 한 번 거치면 총 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