C#/알고리즘

10. 10845번 큐 (해결)

dev_sr 2020. 6. 21. 22:05

20트..

 

 

해결 방법

 

1. 출력할 때 string 형 변수에 + \n으로 한번에 집어넣고 마지막에 한번 출력한다.

-> 문제에는 명령이 주어질 때마다 한줄에 하나씩 출력하라고 하는데 그러면 시간초과..

 

2. string으로 큐를 만든다.

-> 문제에는 정수를 저장하는 큐라고 나와있지만 string으로 큐를 만든다

그리고 정수변환을 하지 않고 큐에 넣음 

Int.Parse()가 시간이 오래 걸리나봄??

 

 

출력만 한번에 하면 될 줄 알았는데 계속 시간초과 떠서 정수변환을 안했더니 통과했당..

 

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _10845
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Queue<string> queue = new Queue<string>();
 
            int length = int.Parse(Console.ReadLine());
            int count = 0;
            string printNum = null;
 
            if (length >= 1 && length <= 10000)
            {
 
                for (int i = 0; i < length; i++)
                {
                    string input = Console.ReadLine();
 
                    if(input.Contains("push"))
                    {
                        string[] inputs = input.Split(' ');
                        queue.Enqueue(inputs[1]);
                        count++;
                    }
 
                    if (input == "size")
                    {
                        printNum += count.ToString() + "\n";
                    }
 
                    if (count>0)
                    {
                        if(input=="pop")
                        {
                            printNum += queue.Dequeue()+ "\n";
                            count--;
                        }
                        if(input=="front")
                        {
                            printNum += queue.First()+ "\n";
                        }
                        if (input == "back")
                        {
                            printNum += queue.Last()+ "\n";
                        }
                        if (input == "empty")
                        {
                            printNum += "0\n";
                        }
 
                    }
                    else if (count == 0)
                    {
                        if (input == "pop" || input == "front" || input == "back")
                        {
                            printNum += "-1\n";
                        }
 
                        if (input == "empty")
                        {
                            printNum += "1\n";
                        }
 
                    }
 
                }
                Console.Write(printNum);
            }
 
        }
    }
}
 

 

 

 

 

 

-------------------------------------------------------------------------------------------------------------------

if문으로 작성 -> 시간초과

switch로 작성 -> 시간초과

입력을 한줄로 줄여봤더니 런타임 에러떠서 고쳤더니 -> 시간초과 

queue.Count가 오래걸리나 싶어서 count 변수를 따로 뒀는데 -> 시간초과

queue.First 랑 Last가 문제인 줄 알아서 head, tail 변수를 따로 설정해줬는데 -> 시간초과 

큐의 갯수가 0일 때 -1이 나오는 명령어를 한번에 묶어 봤는데 -> 시간초과

뭘해도 시간초과

 

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _10845
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Queue<int> queue = new Queue<int>();
 
            int length = int.Parse(Console.ReadLine());
            int count = 0;
            int printNum = 0;
 
            if (length >= 1 && length <= 10000)
            {
 
                for (int i = 0; i < length; i++)
                {
                    string[] input = Console.ReadLine().Split(' ');
                    string order = input[0];
 
                    if(order== "push")
                    {
                        int num = int.Parse(input[1]);
                        if (num >= 1 && num <= 100000)
                        {
                            queue.Enqueue(num);
                            count++;
                            continue;
                        }
                    }
 
                    switch (order)
                    {
                        
                        case "size":
                            printNum = count;
                            break;
 
                        case "pop":
                            if (count > 0)
                            {
                                printNum = queue.Dequeue();
                                count--;
                            }
                            else
                            {
                               printNum=-1;
                            }
 
                            break;
 
                        case "front":
                            if (count > 0)
                            {
                                printNum =  queue.First();
                            }
                            else
                            {
                               printNum = -1;
                            }
 
                            break;
 
                        case "back":
                            if (count > 0)
                            {
                                printNum = queue.Last();
                            }
                            else
                            {
                                printNum = -1;
                            }
 
                            break;
 
                        case "empty":
                            if (count > 0)
                            {
                                printNum = 0;
                            }
                            else
                            {
                                printNum = 1;
                            }
                            break;
 
                    }
                    Console.WriteLine(printNum);
 
                }
            }
 
        }
    }
}
 

 

 

 

 

 

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 ��

www.acmicpc.net

 

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

12. 1074번 Z (시간 줄임)  (0) 2020.07.11
11. 2504번 괄호의 값 (해결)  (0) 2020.06.22
9. 1302번 베스트셀러 (LINQ group by)  (0) 2020.06.07
8. 1343번 폴리오미노  (0) 2020.06.01
7. 1181번 단어정렬(수정)  (0) 2020.05.24