BaekJoon[C#]

문자열 단계 1152

wny0320 2022. 9. 27. 22:13

백준 온라인 코딩 문제풀이

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

코드 참고

https://replit.com/@wny0320

 

wny0320 (박 상운)

Run code live in your browser. Write and run code in 50+ languages online with Replit, a powerful IDE, compiler, & interpreter.

replit.com

 

1157, 1152 2908에 대해 다룸

 


1157

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main(string[] args)
    {
        string Input = Console.ReadLine();
        Input = Input.ToUpper();
        Dictionary<char, int> result = new Dictionary<char, int>();
        List<char> alpa = new List<char>();
        for(int i = 0; i < Input.Length; i++)
        {
            if(result.ContainsKey(Input[i]) == false)
            {
                result.Add(Input[i],1);
            }
            else
            {
                result[Input[i]] += 1;
            }
        }
        foreach(char i in result.Keys)
        {
            if(result[i] == result.Values.Max())
            {
                alpa.Add(i);
            }
        }
        if(alpa.Count == 1)
        {
            Console.WriteLine(alpa[0]);
        }
        else
        {
            Console.WriteLine("?");
        }
    }
}

해당하는 문자가 중복되었을 때 세기라는 글귀를 보고 Dictionary 형태가 생각나서 풀음

 

Input값들은 대소문자가 섞여있지만 대문자 기준으로 출력이므로 대문자로 바꿔주는 Upper()메소드를 사용

 

Input 배열에 대한 인덱스 값들이 Dictonary에 없다면  Add로 key와 value를 추가

 

있다면 해당 key값의 value를 +1

 

foreach문으로 key들의 값들을 뺴와서 해당 value가 Dictionary의 value의 최대값 max와 같으면 리스트에 추가

 

리스트의 인덱스의 갯수가 1이 넘으면  ? 출력, 1개면 인덱스 0번만 있을 것이므로 0번 출력

 


1152

using System;
class Program
{
    public static void Main(string[] args)
    {
        string[] Input = Console.ReadLine().Split();
        int result = Input.Length;
        if (Input[0] == "")
        {
            result -= 1;
        }
        if(Input[Input.Length-1] == "")
        {
            result -= 1;
        }
        Console.WriteLine(result);
    }
}

앞과 뒤에 공백이 있어 Console.ReadLine().Split()을 할 시 ""문자열이 하나 들어가 Input.Length의 값이 하나 늘어남

 

따라서 앞뒤에 공백이 있는 경우 길이 값에 -1을 해주면 편하게 해결을 할 수 있음

 

문제에 주어진 예시에선 공백이 하나지만 만약 2개 3개의 공백이 주어진다? 그러면 문제가 해결되지 못함

 

따라서 다른 방법으로도 해결하여 보았음

 

1152 - 1

using System;
using System.Collections.Generic;
class Program
{
    public static void Main(string[] args)
    {
        string[] Input = Console.ReadLine().Split();
        List<string> Input_list = new List<string>();
        for(int i = 0; i < Input.Length; i++)
        {
            if(Input[i] != "")
            {
                Input_list.Add(Input[i]);
            }
        }
        Console.WriteLine(Input_list.Count);
    }
}

해당 방법은 문자열을 통해서 해결하였음

 

똑같이 Split으로 ReadLine하지만 Input의 index의 갯수만큼 반복문을 돌림

 

"", 즉 공백이 아닐 경우에만 리스트에 추가하여 count를 통해 진짜 문자열일 갯수만 출력이 가능함

 


2908

using System;
using System.Linq;
class Program
{
    public static void Main(string[] args)
    {
        string[] Input = Console.ReadLine().Split();
        int[] num = new int[Input.Length];
        for (int i = 0; i < Input.Length; i++)
        {
            num[i] = Int32.Parse(Input[i].Reverse().ToArray());
        }
        Console.WriteLine(num.Max());
    }
}

해당 코드에 대해서는 stackoverflow를 보고 참고하였음

-참고 게시글에선 Reverse()결과 값이 IEnumerable.char의 형태로 나옴, 이 형태를 string으로 형 변환하는 좀 더 성능이 좋은 방법을 토론함

 

본문으로 돌아와서 Input을 ReadLine.Split으로 배열로 받음

 

반복문으로 num[] 배열에 Input의 string을 반대로 돌려서 int형태로 바꾸어 저장함

 

Max 메소드를 통하여 최대값을 출력함

'BaekJoon[C#]' 카테고리의 다른 글

문자열 단계 2941  (0) 2022.10.03
문자열 단계 5622  (0) 2022.09.28
문자열 단계 2675  (0) 2022.09.26
함수 1065  (0) 2022.09.25
1차원 배열 4344  (0) 2022.09.24