문제

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.


입력

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다.


출력

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.


제한

  • 1 ≤ k, n ≤ 14

코드

using System;
					
public class Program
{
	public static void Main()
	{
		// :: [설계]
		// :: 저장소 설계
		int[,] apartment = new int[15, 15];
		// :: 0층 입력
		for(int index = 1; index < 15; index++) {
			apartment[0,index] = index;
		}
		// :: 1 ~ 14층 입력
		for(int floor = 1; floor < 15; floor++) {
			for(int number = 1; number < 15; number++) {
				// :: 아래층 거주자 더하기
				int resident = 0;
				for(int downNumber = 1; downNumber <= number; downNumber++) {
					int downFloor = floor - 1;
					resident += apartment[downFloor, downNumber];
				}
				apartment[floor, number] = resident;
			}
		}
		
		// :: 입력 받은만큼 입력을 더 받는다.
		int count = int.Parse(Console.ReadLine());
		string print = "";
		for(int index = 0; index < count; index++) {
			int floor = int.Parse(Console.ReadLine());
			int number = int.Parse(Console.ReadLine());
			print += apartment[floor, number].ToString() + "\n";
		}
		
		// :: 출력
		Console.WriteLine(print);
	}
}

 

'C# > Baekjoon' 카테고리의 다른 글

백준 10757 : 큰 수 A+B  (0) 2022.03.25
백준 2839 : 설탕 배달  (0) 2022.03.24
백준 10250 : ACM 호텔  (0) 2022.03.17
백준 2869 : 달팽이는 올라가고 싶다  (0) 2022.03.13
백준 2480 : 주사위 세개  (0) 2022.03.12
블로그 이미지

RIsN

,

문제

ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.

문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.

그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림

방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.

손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.

여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.


입력

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W). 


출력

프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.


코드

using System;
					
public class Program
{
	public static void Main()
	{
		// :: [설계]
		// :: 입력 받은만큼 입력을 더 받는다.
		// :: 행, 열, 구해야 하는 수를 받는다.
		// :: 구해야 하는 수를 행으로 나누고 나머지를 구한다. : 층 번호
			// :: 나머지가 없으면 행의 수 그대로
		// :: 구해야 하는 수를 행으로 나눈다. + 1 : 방 번호 
		// :: 한번에 출력한다.
		
		// :: 입력 받은만큼 입력을 더 받는다.
		int count = int.Parse(Console.ReadLine());
		string print = "";
		for(int index = 0; index < count; index++) {
			// :: 행, 열, 구해야 하는 수를 받는다.
			string[] raw = Console.ReadLine().Split(' ');
			int column = int.Parse(raw[0]);
			int row = int.Parse(raw[1]);
			int check = int.Parse(raw[2]);
			
			// :: 구해야 하는 수를 행으로 나누고 나머지를 구한다. : 층 번호
				// :: 나머지가 없으면 행의 수 그대로
			int floorRaw = check % column;
			int floor = (floorRaw == 0 ? column : floorRaw) * 100;
			
			// :: 구해야 하는 수를 행으로 나눈다. + 1 : 방 번호
			int room = (check / column) + (floorRaw == 0 ? 0 : 1);
			
			print += string.Format("{0}\n", floor + room);
		}
		
		// :: 한번에 출력한다.
		Console.WriteLine(print);
	}
}

 

'C# > Baekjoon' 카테고리의 다른 글

백준 2839 : 설탕 배달  (0) 2022.03.24
백준 2775 : 부녀회장이 될테야  (0) 2022.03.22
백준 2869 : 달팽이는 올라가고 싶다  (0) 2022.03.13
백준 2480 : 주사위 세개  (0) 2022.03.12
백준 2525 : 오븐 시계  (0) 2022.03.09
블로그 이미지

RIsN

,

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.


입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)


출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


코드

using System;
					
public class Program
{
	public static void Main()
	{
		// :: [설계]
		// :: (올라가는 거리, 떨어지는 거리, 총 거리)를 한 줄로, ' ' 구분으로 입력 받는다.
		
		// :: 총 거리에서 마지막에 떨어지지 않는 거리만큼 뺀다.
		// :: 하루에 올라가는 거리(올라가는 거리 - 떨어지는 거리)를 구한다.
		
		// :: 총 거리 / 하루에 올라가는 거리로 날짜를 구한다.
		// :: 만약 총 거리 % 하루에 올라가는 거리가 나머지가 있으면, 날짜를 하루 더 더해준다.
		
		// :: 출력한다.
		
		// :: [구현]
		// :: (올라가는 거리, 떨어지는 거리, 총 거리)를 한 줄로, ' ' 구분으로 입력 받는다.
		string[] inputRaw = Console.ReadLine().Split(' ');
		int climbDistance = int.Parse(inputRaw[0]);
		int fallDistance = int.Parse(inputRaw[1]);
		int goalDistance = int.Parse(inputRaw[2]);
		
		// :: 총 거리에서 마지막에 떨어지지 않는 거리만큼 뺀다.
		goalDistance -= fallDistance;
		
		// :: 하루에 올라가는 거리(올라가는 거리 - 떨어지는 거리)를 구한다.
		int dailyDistance = climbDistance - fallDistance;
		
		// :: 총 거리 / 하루에 올라가는 거리로 날짜를 구한다.
		int days = goalDistance / dailyDistance;
		
		// :: 만약 총 거리 % 하루에 올라가는 거리가 나머지가 있으면, 날짜를 하루 더 더해준다.
		if((goalDistance % dailyDistance) != 0) {
			days += 1;
		}
		
		// :: 출력한다.
		Console.WriteLine(days);
	}
}

 

블로그 이미지

RIsN

,

문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.


입력

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. 


출력

첫째 줄에 게임의 상금을 출력 한다.


코드

using System;
using System.Collections.Generic;
					
public class Program
{
	public static void Main()
	{
		// :: [설계]
		// :: 3개의 주사위 숫자를 한 줄로, ' ' 구분으로 입력 받는다.
		// :: Dictionary<int, int>로 주사위 숫자를 key에 넣는다.
			// :: 키가 아직 없으면 value = 1
			// :: 키가 있으면 value += 1
			// :: 가장 큰 주사위 숫자를 저장한다.
			// :: 가장 큰 value 숫자를 저장한다.
				// :: +1 될 때의 동일 주사위 숫자를 저장한다.
		
		// :: 가장 큰 value를 기준으로 연산 처리한다.
		// :: If 1
			// :: 가장 큰 주사위 숫자 * 100
		// :: If 2
			// :: 동일 주사위 숫자 * 100 + 1000
		// :: If 3
			// :: 동일 주사위 숫자 * 1000 + 10000
		
		// :: 위의 값을 출력한다
		
		string[] diceRaws = Console.ReadLine().Split(' ');
		
		Dictionary<int, int> diceResult = new Dictionary<int, int>();
		int maxDice = 0;
		int sameDice = 0;
		int sameDiceCount = 1;
		
		for(int index = 0; index < diceRaws.Length; index++) {
			int dice = int.Parse(diceRaws[index]);
			
			if(diceResult.ContainsKey(dice)) {
				diceResult[dice] += 1;
				
				sameDice = dice;
				sameDiceCount = diceResult[dice];
			} else {
				diceResult.Add(dice, 1);
				
				if(maxDice < dice) {
					maxDice = dice;
				}
			}
		}
		
		int value = 0;
		if(sameDiceCount == 1) {
			value = maxDice * 100;
		} else if(sameDiceCount == 2) {
			value = 1000 + (sameDice * 100);
		} else if(sameDiceCount == 3) {
			value = 10000 + (1000 * sameDice);
		}
		
		Console.WriteLine(value);
	}
}

 

'C# > Baekjoon' 카테고리의 다른 글

백준 10250 : ACM 호텔  (0) 2022.03.17
백준 2869 : 달팽이는 올라가고 싶다  (0) 2022.03.13
백준 2525 : 오븐 시계  (0) 2022.03.09
백준 18108 : 1998년생인 내가 태국에서는 2541년생?!  (0) 2022.03.07
백준 10926 : ??!  (0) 2022.03.06
블로그 이미지

RIsN

,

문제

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.


입력

첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다. 


출력

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)


코드

using System;
					
public class Program
{
	public static void Main()
	{
		// :: 기준 시간 가져오기
		string[] time = Console.ReadLine().Split(' ');
		
		// :: 기준 시간 나누기
		int hour = int.Parse(time[0]);
		int minute = int.Parse(time[1]);
		
		// :: 추가 시간 더하기
		minute += int.Parse(Console.ReadLine());
		
		// :: 고정 시간
		const int staticHour = 60;
		const int staticDay = 24;
		
		// :: 시간 계산
		if(minute >= staticHour) {
			// :: 시 계산
			hour += (minute / staticHour);
			if(hour >= staticDay) {
				hour -= staticDay;
			}
			
			// :: 분 계산
			minute = minute % staticHour;
		}
		
		// :: 출력
		Console.WriteLine(string.Format("{0} {1}", hour, minute));
	}
}

 

'C# > Baekjoon' 카테고리의 다른 글

백준 10250 : ACM 호텔  (0) 2022.03.17
백준 2869 : 달팽이는 올라가고 싶다  (0) 2022.03.13
백준 2480 : 주사위 세개  (0) 2022.03.12
백준 18108 : 1998년생인 내가 태국에서는 2541년생?!  (0) 2022.03.07
백준 10926 : ??!  (0) 2022.03.06
블로그 이미지

RIsN

,

문제

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.


입력

서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)


출력

불기 연도를 서기 연도로 변환한 결과를 출력한다.


코드

using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int diff = 544 - 1;
        Console.WriteLine(int.Parse(Console.ReadLine()) - diff);
    }
}

설명

  1. 불기, 서기 차이 확인해서 : int diff = 544 - 1
  2. 읽은 걸 : Console.ReadLine()
  3. 숫자로 변환하고 : int.Parse()
  4. 차이 만큼 빼서 : - diff
  5. 출력한다 : Console.WriteLine()

'C# > Baekjoon' 카테고리의 다른 글

백준 10250 : ACM 호텔  (0) 2022.03.17
백준 2869 : 달팽이는 올라가고 싶다  (0) 2022.03.13
백준 2480 : 주사위 세개  (0) 2022.03.12
백준 2525 : 오븐 시계  (0) 2022.03.09
백준 10926 : ??!  (0) 2022.03.06
블로그 이미지

RIsN

,

백준 10926 : ??!

C#/Baekjoon 2022. 3. 6. 12:01

문제

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.


입력

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.


출력

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.


코드

using System;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine(Console.ReadLine() + "??!");
	}
}

설명

  1. 받아서 : Console.ReadLine()
  2. 추가해서 : + "??!"
  3. 출력한다 : Console.WriteLine(출력 문자)
블로그 이미지

RIsN

,