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

크로아티아 알파벳변경

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

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

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

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 
문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

:: 성공

 

: 설명 :

> 문자수 세는 거라서 굳이 크로아티아 알파벳으로 변경 안하고, 숫자로 바꿔서(Replace) 확인

 

: 개선점 : ???

using System;

namespace String00
{
    class Program
    {
        static void Main(string[] args)
        {
            // : Read
            // : Replace
            string input = Console.ReadLine()
                .Replace("c=", "1")
                .Replace("c-", "2")
                .Replace("dz=", "3")
                .Replace("d-", "4")
                .Replace("lj", "5")
                .Replace("nj", "6")
                .Replace("s=", "7")
                .Replace("z=", "8");

            // : Print
            string print = input.Length.ToString();
            Console.WriteLine(print);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

백준 1712 : 손익분기점  (0) 2021.02.01
백준 1316 : 그룹 단어 체커  (0) 2021.01.30
백준 5622 : 다이얼  (0) 2021.01.28
백준 2908 : 상수  (0) 2021.01.27
백준 1152 : 단어의 개수  (0) 2021.01.26
블로그 이미지

RIsN

,

백준 5622 : 다이얼

C# 2021. 1. 28. 23:38

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

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

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

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

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

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 
단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

:: 성공

 

: 설명 :

> 문자열의 각 문자가 어느 숫자에 대응되는지 확인

> 숫자에 +1된 값을 총합(Count)에 넣으면 종료

 

: 개선점 : 좀 더 노가다성이 없게 할 수 없을까?

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

namespace String00
{
    class Program
    {
        static void Main(string[] args)
        {
            // : Read
            string input = Console.ReadLine();

            // : Convert
            int count = 0;
            foreach(var itm in input)
            {
                int ascii = Convert.ToInt32(itm);
                if(65 <= ascii && ascii <= 67) // :: ABC
                {
                    count += 3;
                } else if(68 <= ascii && ascii <= 70) // :: DEF
                {
                    count += 4;
                } else if(71 <= ascii && ascii <= 73) // :: GHI
                {
                    count += 5;
                } else if(74 <= ascii && ascii <= 76) // :: JKL
                {
                    count += 6;
                } else if(77 <= ascii && ascii <= 79) // :: MNO
                {
                    count += 7;
                } else if(80 <= ascii && ascii <= 83) // :: PQRS
                {
                    count += 8;
                } else if(84 <= ascii && ascii <= 86) // :: TUV
                {
                    count += 9;
                } else if(87 <= ascii && ascii <= 90) // :: WXYZ
                {
                    count += 10;
                }
            }

            // : Print
            string print = count.ToString();
            Console.WriteLine(print);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

백준 1316 : 그룹 단어 체커  (0) 2021.01.30
백준 2941 : 크로아티아 알파벳  (0) 2021.01.29
백준 2908 : 상수  (0) 2021.01.27
백준 1152 : 단어의 개수  (0) 2021.01.26
백준 1065 : 한수  (0) 2021.01.18
블로그 이미지

RIsN

,

백준 2908 : 상수

C# 2021. 1. 27. 23:17

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

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

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

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 
두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
첫째 줄에 상수의 대답을 출력한다.

:: 성공

 

: 설명 :

> 문자열은 배열이니까, 그 배열을 뒤집어서(Reverse) 비교하면 종료

 

: 개선점 : ???

using System;
using System.Linq;

namespace String00
{
    class Program
    {
        static void Main(string[] args)
        {
            // : Read
            string[] inputs = Console.ReadLine().Split(' ');

            // :: Reverse
            char[] arrNumberA = inputs[0].ToCharArray().Reverse().ToArray();
            char[] arrNumberB = inputs[1].ToCharArray().Reverse().ToArray();

            // :: Convert
            int numberA = int.Parse(new string(arrNumberA));
            int numberB = int.Parse(new string(arrNumberB));

            // :: Print
            string print = numberA > numberB ? numberA.ToString() : numberB.ToString();
            Console.WriteLine(print);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

백준 2941 : 크로아티아 알파벳  (0) 2021.01.29
백준 5622 : 다이얼  (0) 2021.01.28
백준 1152 : 단어의 개수  (0) 2021.01.26
백준 1065 : 한수  (0) 2021.01.18
백준 4344 : 평균은 넘겠지  (0) 2021.01.14
블로그 이미지

RIsN

,

백준 1152 : 단어의 개수

C# 2021. 1. 26. 23:40

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 
이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 
또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
첫째 줄에 단어의 개수를 출력한다.

:: 성공

 

: 설명 :

> 시간 제한이 귀찮은 문제

> Split으로 나누고서 단어의 개수를 구한다.

> 만약 나눴을 때 앞이랑 뒤가 공백이면 Count(단어의 개수)에서 -1 한다.

 

: 개선점 : C#도 정규식을 활용한 Split

using System;

namespace String00
{
    class Program
    {
        static void Main(string[] args)
        {
            // : Read
            string[] inputWords = Console.ReadLine().Split(' ');
            
            // :: Get
            int count = inputWords.Length;

            // :: IF
            if (inputWords[0] == "")
                count -= 1;
            if (inputWords[inputWords.Length - 1] == "")
                count -= 1;

            // :: Print
            Console.WriteLine(count);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

백준 5622 : 다이얼  (0) 2021.01.28
백준 2908 : 상수  (0) 2021.01.27
백준 1065 : 한수  (0) 2021.01.18
백준 4344 : 평균은 넘겠지  (0) 2021.01.14
백준 8958 : OX퀴즈  (0) 2021.01.13
블로그 이미지

RIsN

,

백준 1065 : 한수

C# 2021. 1. 18. 23:50

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

:: 성공

 

: 설명 :

> 간단히 설명하자면 출력 결과를 토대로 1~99까지는 그냥 한수라고 칠 것.
> 100부터 1000까지의 계산인데, 123, 135, 147 같은 것의 개수를 구하라는 것.
>> 이곳에서의 등차수열?
>> 각 자리수를 토대로 다음 자리수 마다 동일한 특정값을 더했을 때 나오는 수
>> 1(+1)2(+1)3, 1(+2)3(+2)5 이런 것

 

: 개선점 : Convert가 너무 많은가?

using System;

namespace Function00
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Read
            string input = Console.ReadLine();
            
            // :: EXIT
            if(input.Length <= 2)
            {
                Console.WriteLine(input);
                return;
            }

            // :: First Set
            int oneNumber = 99;
            int count = Int32.Parse(input);

            // :: Find
            for(int i = 100; i <= count; i++)
            {
                if (checkNumber(i) == true)
                    oneNumber += 1;
            }

            // :: Print
            string print = oneNumber.ToString();
            Console.WriteLine(print);
        }

        // :: Checker
        public static bool checkNumber(int number)
        {
            // :: Convert
            string numberToString = number.ToString();

            // :: Get
            int plusValue = int.Parse(numberToString[1].ToString()) - int.Parse(numberToString[0].ToString());

            // :: Find False
            for(int i = 2; i < numberToString.Length; i++)
            {
                int checkValue = int.Parse(numberToString[i].ToString()) - int.Parse(numberToString[i - 1].ToString());
                if (checkValue != plusValue)
                    return false;
            }

            // :: True
            return true;
        }
    }
}

 

'C#' 카테고리의 다른 글

백준 2908 : 상수  (0) 2021.01.27
백준 1152 : 단어의 개수  (0) 2021.01.26
백준 4344 : 평균은 넘겠지  (0) 2021.01.14
백준 8958 : OX퀴즈  (0) 2021.01.13
백준 1546 : 평균  (0) 2021.01.11
블로그 이미지

RIsN

,

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력은 없다.
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

:: 성공

 

: 설명 :

> 셀프 넘버를 구하는 게 아니라, 셀프 넘버가 아닌 것을 구하자

> 즉, 1부터 시작해서 1+1=2 니까 2를 제외, 2+2=4 니까 4를 제외, 4+4=8이니까 8을 제외 이런 식

 

: 개선점 : for를 2번 쓰는게 싫어서 안에서 while을 썼더니, 속도가 느려졌다...

using System;

namespace Function00
{
    class Program
    {
        // :: for Use
        private static bool[] noSelfNumber = new bool[10001];

        static void Main(string[] args)
        {
            // :: Dummy
            noSelfNumber[0] = true;

            // :: Find
            string print = "";
            for (int i = 1; i <= 10000; i++)
            {
                // :: EXIT
                if (noSelfNumber[i] == true)
                    continue;

                // :: Set
                int selfSum = SelfSum(i);
                while(selfSum <= 10000)
                {
                    noSelfNumber[selfSum] = true;
                    int tempSum = selfSum;
                    selfSum = SelfSum(tempSum);
                }

                // :: Get
                print += (print == "" ? "" : "\n") + i.ToString();
            }

            // :: Print
            Console.WriteLine(print);
        }

        // :: Self Sum
        public static int SelfSum(int number)
        {
            // :: Set
            int result = number;

            // :: Convert
            string numberToString = number.ToString();

            // :: Find
            for(int i = 0; i < numberToString.Length; i++)
            {
                result += int.Parse(numberToString[i].ToString());
            }

            return result;
        }
    }
}

 

블로그 이미지

RIsN

,

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 
점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

:: 성공

: 개선점 : Linq에 너무 의지하는 건가?

using System;
using System.Linq;

namespace Array01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Read
            int readCount = Int32.Parse(Console.ReadLine());

            // for Use
            string print = "";

            // :: Get
            for(int i = 0; i < readCount; i++)
            {
                // :: Read
                string[] scoresTemp = Console.ReadLine().Split(' ');

                // :: Convert
                int[] scores = new int[scoresTemp.Length - 1];
                for(int j = 1; j < scoresTemp.Length; j++)
                {
                    scores[j - 1] = int.Parse(scoresTemp[j]);
                }

                // :: Find
                int count = scores.Count(ele => ele > scores.Average());
                float percent = ((float)count / (float)scores.Length) * 100;

                // :: Remember
                string percentToString = string.Format("{0:0.000}%", Math.Round(percent, 3));
                print += percentToString + (i >= (readCount - 1) ? "" : "\n");
            }

            // :: Print
            Console.WriteLine(print);
        }
    }
}

 

 
 

 

 

'C#' 카테고리의 다른 글

백준 1152 : 단어의 개수  (0) 2021.01.26
백준 1065 : 한수  (0) 2021.01.18
백준 8958 : OX퀴즈  (0) 2021.01.13
백준 1546 : 평균  (0) 2021.01.11
백준 3052 : 나머지  (0) 2021.01.09
블로그 이미지

RIsN

,

백준 8958 : OX퀴즈

C# 2021. 1. 13. 23:05

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

첫째 줄에 테스트 케이스의 개수가 주어진다. 
각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 
문자열은 O와 X만으로 이루어져 있다.
각 테스트 케이스마다 점수를 출력한다.

:: 성공

: 개선점 : ???

using System;

namespace Array01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Read
            int readCount = Int32.Parse(Console.ReadLine());

            // for Use
            string print = "";

            // :: Get
            for(int i = 0; i < readCount; i++)
            {
                string ox = Console.ReadLine();

                // :: Reset
                int score = 0;
                int checkContinue = 1;

                // :: Find
                foreach(var itm in ox)
                {
                    if(itm == 'O')
                    {;
                        score += checkContinue;
                        checkContinue += 1;
                    } else if(itm == 'X')
                    {
                        // :: Reset
                        checkContinue = 1;
                    }
                }

                // :: Remember
                print += score.ToString() + (i == readCount - 1 ? "" : "\n");
            }


            // :: Print
            Console.WriteLine(print);
        }
    }
}

 

 
 

 

 

'C#' 카테고리의 다른 글

백준 1065 : 한수  (0) 2021.01.18
백준 4344 : 평균은 넘겠지  (0) 2021.01.14
백준 1546 : 평균  (0) 2021.01.11
백준 3052 : 나머지  (0) 2021.01.09
백준 2577 : 숫자의 개수  (0) 2021.01.07
블로그 이미지

RIsN

,

백준 1546 : 평균

C# 2021. 1. 11. 23:02

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 
둘째 줄에 세준이의 현재 성적이 주어진다. 
이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
첫째 줄에 새로운 평균을 출력한다. 
실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

:: 성공

: 개선점 : Linq가 너무 편한가?

using System;
using System.Linq;

namespace Array01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: for Use

            // :: Dummy
            Console.ReadLine();

            // :: Read
            string[] arrStringScores = Console.ReadLine().Split(' ');

            // :: Convert
            int[] arrScores = arrStringScores.Select(ele => int.Parse(ele)).ToArray();

            // :: Get
            int max = arrScores.Max();

            // :: Change
            float[] arrFakeScores = arrScores.Select(ele => (float)ele / max * 100).ToArray();

            // :: Get
            float fakeAverage = arrFakeScores.Sum() / arrFakeScores.Length;

            // :: Print
            string print = string.Format("{0}", fakeAverage);
            Console.WriteLine(print);
        }
    }
}

 

'C#' 카테고리의 다른 글

백준 4344 : 평균은 넘겠지  (0) 2021.01.14
백준 8958 : OX퀴즈  (0) 2021.01.13
백준 3052 : 나머지  (0) 2021.01.09
백준 2577 : 숫자의 개수  (0) 2021.01.07
백준 2562 : 최댓값  (0) 2021.01.05
블로그 이미지

RIsN

,

백준 3052 : 나머지

C# 2021. 1. 9. 23:06

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 
이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

:: 성공

: 개선점 : ???

using System;
using System.Collections.Generic;

namespace Array01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: for Use
            int[] array = new int[10];
            List<int> remainders = new List<int>();
            int differentCount = 0;

            // :: Read
            for(int i = 0; i < array.Length; i++)
            {
                // :: Get
                array[i] = Int32.Parse(Console.ReadLine());
                int tempRemainder = array[i] % 42;

                // :: Find
                if (remainders.Contains(tempRemainder) == false)
                {
                    remainders.Add(tempRemainder);
                    differentCount += 1;
                }
            }

            // :: Print
            string print = differentCount.ToString();
            Console.WriteLine(print);
        }
    }
}

 

 
 

 

 

'C#' 카테고리의 다른 글

백준 8958 : OX퀴즈  (0) 2021.01.13
백준 1546 : 평균  (0) 2021.01.11
백준 2577 : 숫자의 개수  (0) 2021.01.07
백준 2562 : 최댓값  (0) 2021.01.05
백준 10818 : 최소, 최대  (0) 2021.01.04
블로그 이미지

RIsN

,