본문 바로가기

온라인 코딩/큐(Queue)와 스택(Stack)

[백준] 10409번 서버

 

 

문제

 

소스코드 (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번 프린터 큐