본문 바로가기

Programming/백준 문제풀이

C# 문자열 백준 문제풀이 (1157, 1316, 2675, 2908, 2941, 5622)

최근 C#을 공부하면서 차근차근 기본문제들을 C#을 이용해서 풀기로 했다.
이번에 푼 챕터는 문자열 관련 챕터이며 새롭게 알게 된 개념부터 몇 개만 소개하고 정답 공유 후 포스팅을 마치겠다.

c# 인풋 받기 (input read)

string input = ReadLine(); // string 경우
string[] input = ReadLine().Split(); // string split해서 입력받을 경우
int input = int.Parse(ReadLine()); // int 경우

 

c# 배열 초기화 (array initialization)

using System.Linq;

int[] freq = Enumerable.Repeat(0, 32).ToArray(); // 32개의 0값을 가지는 배열 생성

 

Ascii string int 변환

int num = Convert.ToInt32(string_value);
char ch = Convert.ToChar(num);

 

한 단어 내 반복되는 문자 카운팅 (counting character in word)

using System.Linq;

int count = word.Count(x => x == 'A'); 

 

String 내에 반복되는 단어 카운팅 (counting word in String)

// 해당 문자를 기준으로 split 시켜 생성된 배열의 길이를 카운팅하는 방법이다.
int count = sentence.Split(word).Length-1

 

백준 1157번

using System;
using System.Linq;
using static System.Console;


namespace _1157_FreqWord
{
    class Program
    {
        static void Main(string[] args)
        {
            int maxFreq = 0;
            int[] freq = Enumerable.Repeat(0, 32).ToArray(); // 32개의 0값을 가지는 배열 생성
            string word = ReadLine().ToUpper(); // input string 대문자 변환
            foreach (char c in word)
            {
                int value = Convert.ToInt32(c);
                freq[value - 65] += 1;
            }
            maxFreq = freq.Max();
            int index_Fword = Array.IndexOf(freq, maxFreq);
            int index_Lword = Array.LastIndexOf(freq, maxFreq);
            if (index_Fword == index_Lword)
            {
                WriteLine(Convert.ToChar(index_Fword + 65));
            }
            else
            {
                WriteLine("?");
            }
        }
    }
}

 

백준 1316번

using System;
using System.Linq;
using static System.Console;

namespace _1316_groupWord
{
    class Program
    {
        static void Main(string[] args)
        {
            int trial = int.Parse(ReadLine());
            int counter = 0;
            for (int i = 0; i < trial; i++)
            {
                string word = ReadLine();
                for (int j = 0; j < word.Length;)
                {
                    int count = word.Count(x => x == word[j]);
                    string repeated = new String(word[j], count);
                    if (word.Split(repeated).Length == 2)
                    {
                        j += count;
                        if (j == word.Length) { counter += 1; }
                    }
                    else { break; }

                }
            }
            WriteLine(counter);
        }
    }
}

 

백준 2675번

using System;
using static System.Console;

namespace _2675_문자열반복
{
    class Program
    {
        static void Main(string[] args)
        {
            int trial = int.Parse(ReadLine());
            for (int i = 0; i < trial; i++)
            {
                string[] input = ReadLine().Split();
                int n = int.Parse(input[0]);
                string word = input[1];
                for (int j = 0; j < word.Length; j++)
                {
                    for (int k = 0; k < n; k++)
                    {
                        Write(word[j]);
                    }
                }
                Write("\n");
            }
        }
    }
}

 

백준 2908번

using System;
using static System.Console;

namespace _2908_상수
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] inputSTR = ReadLine().Split();
            int[] input = new int[2];
            input[0] = int.Parse(inputSTR[0]);
            input[1] = int.Parse(inputSTR[1]);
            int reversed_1 = (input[0] / 100) + (input[0] % 100 / 10) * 10 + (input[0] % 10) * 100;
            int reversed_2 = (input[1] / 100) + (input[1] % 100 / 10) * 10 + (input[1] % 10) * 100;
            WriteLine(Math.Max(reversed_1, reversed_2));
        }
    }
}

 

백준 2941번

using System;
using System.Linq;
using static System.Console;

namespace _2941_CROATIA
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0;
            string input = ReadLine();
            char[] inputArr;
            inputArr = input.ToCharArray();
            count += (input.Split("c=").Length - 1);
            count += (input.Split("c-").Length - 1);
            count += (input.Split("dz=").Length - 1);
            count += (input.Split("d-").Length - 1);
            count += (input.Split("lj").Length - 1);
            count += (input.Split("nj").Length - 1);
            count += (input.Split("s=").Length - 1);
            count += (input.Split("z=").Length - 1);
            WriteLine(input.Length - count);
        }
    }
}

 

백준 5622번

using System;
using static System.Console;

namespace _5622_dial
{
    class Program
    {
        static void Main(string[] args)
        {
            int time = 0;

            string word = ReadLine().ToUpper(); // input string 대문자 변환
            foreach (char c in word)
            {
                int value = Convert.ToInt32(c);
                if (value <= 67) { time += 3; }
                else if (value <= 70) { time += 4; }
                else if (value <= 73) { time += 5; }
                else if (value <= 76) { time += 6; }
                else if (value <= 79) { time += 7; }
                else if (value <= 83) { time += 8; }
                else if (value <= 86) { time += 9; }
                else if (value <= 90) { time += 10; }
            }
            WriteLine(time);
        }
    }
}