[BOJ] 1940 주몽

Algorithm 2023. 1. 20. 02:23
반응형

 

 

https://www.acmicpc.net/problem/1940

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace _10822
{
    class Program
    {
        static void Main()
        {
            
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            //StringBuilder sb = new StringBuilder();
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
            
            // 번호를 정렬한 뒤
            //
            //     가장 앞 값과 가장 뒷 값의 인덱스를 변수로 잡는다
            //
            // 만약 더했을때 m과 같다면, 갑옷을 만드는데 사용하므로
            //
            // 앞값++, 뒷값--를 동시에 해주고
            //
            //     m보다 크다면 뒷값이 너무 큰 경우이므로 뒷값--만,
            //
            // m보다 작다면 앞값이 너무 작은 경우이므로 앞값++만 해주면
            //
            // O(N)정도에 끝낼수 있다.
            int n = int.Parse(sr.ReadLine());
            int m = int.Parse(sr.ReadLine());
            int[] arr = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int cnt = 0;
            
            Array.Sort(arr);

            foreach (var num in arr)
            {
                sw.Write("{0}\t", num);
            }
            
            sw.WriteLine();
            
            //투포인터 
            int start = 0;
            int end = n - 1;
            for (int i = 0; i<arr.Length; i++)
            {
                if (i == start)
                {
                    sw.Write("↑ start\t");
                }else if (i == end)
                {
                    sw.Write("↑ end", i);
                }
                else
                {
                    sw.Write("\t");
                }
            }
            
            Console.WriteLine();
            
            while(start<end){
                if (arr[start] + arr[end] == m)
                {
                    cnt++; 
                    end--; 
                    start++;
                }
                if(arr[start]+arr[end] >  m) 
                    end--;
                if(arr[start]+arr[end] <  m) 
                    start++;
            }
            
            sw.WriteLine(cnt);
            
            sr.Close();
            sw.Close();
            
            
            
        }
    }
    
}
반응형

'Algorithm' 카테고리의 다른 글

[프로그래머스] 다트게임  (0) 2023.01.20
[BOJ] 21921 블로그  (0) 2023.01.20
[BOJ] 1254 팰린드롬 만들기  (0) 2023.01.20
[BOJ] 1159 농구 경기  (0) 2023.01.20
[BOJ] 1764 듣보잡  (0) 2023.01.20
: