반응형

1. 문제

- [백준 C#] 1316번 그룹 단어 체커 (C#)  (https://www.acmicpc.net/problem/1316)

 

 

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 문자열 입력 받기
  • 각 문자열의 첫글자부터 반복여부 확인하기
  • 전체 a~b까지 반복 여부를 확인 할 필요 없이 단어에 있는 알파벳만 확인

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace S5_01316번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());

            int result = 0;

            // 개수 카운팅을 위한 flag
            bool flag = false;


            for (int i = 0; i < cnt; i++)
            {
                string word = Console.ReadLine();
                string word2 = word;

                if (word.Length == 1)
                {
                    flag = true;
                }
                else {
                    foreach (var a in word)
                    {
                        // 문자열 포함 여부를 확인하여 검증하기 위해 첫글자를 지우고 해당 문자가 뒤에 다른 그룹을 형성하는지 확인
                        word2 = word2.Remove(0, 1);

                        flag = true;

                        if (word2.Length == 0)
                        {
                            break;
                        }
                        else
                        {
                            // 맨 앞글자가 같은 문자인 경우는 검증 건너뜀
                            // ex. aabcd는 a를 지웠지만 다음 글자가 a기에 아래 검증이 의미가 없음
                            if (word2[0] != a)
                            {
                                // 맨 앞글자를 제외한 다른 곳에서 값이 발견되면 그룹 문자 조건에 위배
                                if (word2.Contains(a))
                                {
                                    // 떨어져 있는 그룹에 해당 문자가 있는 경우
                                    // 카운팅이 되지 않고 로직 종료
                                    flag = false;
                                    break;
                                }
                            }
                        }
                    }
                }


                if (flag)
                {
                    result++;
                }

                // flag 초기화
                flag = false;
            }


            Console.WriteLine(result);
        }
    }
}

// 1316번 그룹 단어 체커
// https://www.acmicpc.net/problem/1316
반응형
반응형

1. 문제

- [백준 C#] 2941번 크로아티아 알파벳 (C#)  (https://www.acmicpc.net/problem/2941)

 

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경

č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

 

 

2. 문제 포인트

  • 단어 입력 받기
  • 크로아티아 알파벳에 해당하는 문자열을 '1'로 바꾸기
    이유 : 다른 알파벳 a나 b등으로 바꾸면 또 다른 크로아티아 알파벳 조합이 만들어 질 수 있으므로 전혀 관계없는 1로 변환
  • 변환이 완료된 문자의 문자열 개수 출력

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace S5_02941번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            word = word.Replace("c=", "1");
            word = word.Replace("c-", "1");
            word = word.Replace("dz=", "1");
            word = word.Replace("d-", "1");
            word = word.Replace("lj", "1");
            word = word.Replace("nj", "1");
            word = word.Replace("s=", "1");
            word = word.Replace("z=", "1");

            Console.WriteLine(word.Count());
        }
    }
}

// 2941번 크로아티아 알파벳
// https://www.acmicpc.net/problem/2941
반응형
반응형

1. 문제

- [백준 C#] 1157번 단어 공부 (C#)  (https://www.acmicpc.net/problem/1157)

 

 

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

 

 

2. 문제 포인트

  • 단어 입력 받기
  • 가장 많이 사용된 알파벳 출력
  • 최다 사용 알바벳이 두개인 경우 물음표 출력

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;

namespace B1_01157번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            List<int> cnt = new List<int>( Enumerable.Repeat<int>(0, 26).ToArray() );

            word = word.ToUpper();
            
            foreach (var a in word)
            {
                cnt[Convert.ToInt32(a)-65] += 1;
            }

            // LINQ 쿼리문을 이용해 최대값을 가진 요소의 개수를 구하기
            int linq_query = cnt.Where(n => n == cnt.Max()).Count() ;

            // 최댓값이 2개인 경우 필터
            if (linq_query>1)
            {
                Console.WriteLine("?");
            }
            else
            {
                // 아스키 코드를 이용해 해당 인덱스의 값 출력
                int co = 65 + cnt.IndexOf(cnt.Max());
                byte[] a = new byte[] { byte.Parse(co.ToString()) };
                Console.WriteLine(System.Text.Encoding.ASCII.GetString(a) );
            }
        }
    }
}

// 1157번 단어 공부
// https://www.acmicpc.net/problem/1157
반응형
반응형

1. 문제

- [백준 C#] 2908번 상수 (C#)  (https://www.acmicpc.net/problem/2908)

 

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 두 숫자를 입력 받는다
  • 숫자 두개를 거꾸로 뒤집는다
  • 뒤집힌 숫자 두개중 큰 수를 출력한다

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace B2_02908번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] num = Console.ReadLine().Split();
            
            // 뒤집은 숫자를 저장할 변수
            string[] reverse_num = new string[] { "", ""};

            // 숫자 뒤집기
            for (int i = 0; i < 3; i++)
            {
                reverse_num[0] += num[0][2 - i];
                reverse_num[1] += num[1][2 - i];
            }

            // 두 숫자중 큰 수를 출력
            Console.WriteLine(reverse_num.Max());
        }
    }
}

// 2908번 상수
// https://www.acmicpc.net/problem/2908
반응형
반응형

1. 문제

- [백준 C#] 5622번 다이얼 (C#)  (https://www.acmicpc.net/problem/5622)

 

 

상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.



전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 각 숫자에 대응되는 알파벳 리스트 만들기
  • 각 문자가 리스트의 어느 인덱스에 해당하는지 구하기
  • 인덱스 값을 합하여 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B2_05622번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            // 다이얼에 있는 번호와 알파벳 리스트
            string[] aa = new string[] { "2ABC", "3DEF", "4GHI", "5JKL", "6MNO", "7PQRS", "8TUV", "9WXYZ" };

            // 총 소요시간
            int result = 0;


            // 알파벳 리스트를 이용하여 각 문자열이 어디에 해당하는지 탐색
            foreach (var w in word)
            {
                foreach (string a in aa)
                {
                    // w는 char이므로 string으로 변환
                    // Contain()을 이용하여 해당 알파벳이 어느 리스트에 있는지 확인
                    // 포함되어 있으면 true를 반환
                    if (a.Contains(w.ToString()))
                    {
                        result += int.Parse(a[0].ToString()) + 1;
                    }
                }

            }
            Console.WriteLine(result);
        }
    }
}

// 5622번 다이얼
// https://www.acmicpc.net/problem/5622
반응형
반응형

1. 문제

- [백준 C#] 11654번 아스키 코드 (C#)  (https://www.acmicpc.net/problem/11654)

 

 

알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 문자 1글자 입력받기
  • 아스키 코드로 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B5_11654번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 입력받은 글자를 Char로 변환
            char chr = Convert.ToChar(Console.ReadLine());

            // chr을 int로 변환시키면 아스키 코드로 반환
            int code = Convert.ToInt32(chr);

            // 아스키 코드 출력
            Console.WriteLine(code);
        }
    }
}

// 11654번 아스키 코드
// https://www.acmicpc.net/problem/11654
반응형
반응형

1. 문제

- [백준 C#] 10809번 알파벳 찾기 (C#)  (https://www.acmicpc.net/problem/10809)

 

 

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 문자열을 입력 받는다.
  • 26개짜리 리스트를 생성한다 (초기 값은 모두 -1)
  • 입력 받은 문자열을 하나씩 잘라 카운트 값을 리스트의 해당 인덱스에 입력한다

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace B5_10809번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string str = Console.ReadLine();

            // 26개의 값을 모두 '-1'로 초기화
            int[] result = Enumerable.Repeat(-1, 26).ToArray();
            int num = 0;
            int cnt = 0;

            // 글자를 한글자씩 계산한다
            foreach (char a in str)
            {
                num = Convert.ToInt32(a);
                
                // 글자가 중복일 경우 첫번째 문자 기준으로 숫자 출력
                if (result[num-97] == -1)
                {
                    result[num-97] = cnt;
                }
                cnt += 1;
            }

            Console.WriteLine(String.Join(" ", result));
        }
    }
}

// 10809번 알파벳 찾기
// https://www.acmicpc.net/problem/10809
반응형
반응형

1. 문제

- [백준 C#] 11720번 숫자의 합 (C#)  (https://www.acmicpc.net/problem/11720)

 

 

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 숫자 자릿수 입력 받기
  • 합계를 구할 숫자 입력 받기
  • 각 자릿수를 잘라 int로 변환 후 result에 더한다

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B4_11720번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 이 알고리즘에서는 입력이 필요 없음
            string cnt = Console.ReadLine();

            // 문자열 슬라이싱을 위해 string으로 받는다
            string num = Console.ReadLine();

            // 합계를 계산할 변수
            int result = 0;

            // 각 글자를 분리해 반복문으로 처리
            foreach (char c in num)
            {
                string cc = Convert.ToString(c);
                int nn = int.Parse(cc);

                result += nn;
            }    

            Console.WriteLine(result);
        }
    }
}

// 11720번 숫자의 합
// https://www.acmicpc.net/problem/11720
반응형

+ Recent posts