문제
소스코드 (C++)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include<iostream>
#include<queue>
int main() {
int N{}, T{};
std::queue<int>queue;
std::cin >> N >> T;
for (int i = 0; i < N; ++i) {
int value;
std::cin >> value;
queue.emplace(value);
}
int sumCount{ 0 };
int index{ 0 };
while (queue.empty() == false) {
int frontValue = queue.front();
queue.pop();
sumCount += frontValue;
if (sumCount > T) {
break;
}
++index;
}
std::cout << index << "\n";
}
|
소스코드 (C#)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
using System;
using System.Collections.Generic;
using System.Linq;
namespace main
{
class Program
{
static void Main()
{
int N, T;
//Queue의 메모리 할당
Queue<int> queue = new Queue<int>();
//문자열을 입력받고 공백기준으로 나누고 저장한다.
string input = Console.ReadLine();
string[] words = input.Split(' ');
N = Convert.ToInt32(words[0]);
T = Convert.ToInt32(words[1]);
//원소들을 입력받는다.
input = Console.ReadLine();
words = input.Split(' ');
foreach (var i in words) {
queue.Enqueue(Convert.ToInt32(i));
}
int sumCount = 0;
int index = 0;
foreach (int i in queue)
{
sumCount += i;
//T보다 커졌다면 그만
if (sumCount > T)
{
break;
}
++index;
}
Console.WriteLine(index);
}
}
}
|
후기
이 문제는 전형적인 FIFO의 문제로 Queue에서 값을 하나씩 빼고 아직 시간(T) 보다 작다면 계속적으로 뽑아서 비교하는 간단한 문제이다.
이 간단한 문제를 C#으로 한번 풀어보고 싶어서 풀었다. C#은 유니티에서 사용할 때 조금 해본 적이 있지만 콘솔 환경에서 입력/출력을 받아본 건 처음이었다.
C#은 C++과 다르게 콘솔에서 한번에 모든 숫자를 받지 못하기 때문에 공백 처리를 해야 한다는 게 조금 불편하게 느껴졌다. 앞으로도 C#의 숙련도를 높이기 위해서 간단한 문제를 풀어볼 예정이다.
출처 및 레퍼런스
문제 링크: https://www.acmicpc.net/problem/10409
관련 글
[자료구조 알고리즘/큐(Queue)와 스택(Stack)] - [Queue]간단한 Queue 구현
[온라인 코딩/큐(Queue)와 스택(Stack)] - [백준] 1966번 프린터 큐
'온라인 코딩 > 큐(Queue)와 스택(Stack)' 카테고리의 다른 글
[프로그래머스] 괄호 회전하기 (0) | 2021.05.19 |
---|---|
[백준] 2493번 탑 (0) | 2020.09.09 |
[백준] 1966번 프린터 큐 (0) | 2020.07.29 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2020.05.18 |
[백준] 10828번 스택 (0) | 2020.03.23 |