반응형

1. 문제

- [백준 C#] 2675번 문자열 반복 (C#)  (https://www.acmicpc.net/problem/2675)

 

 

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

 

 

2. 문제 포인트

  • 케이스 수 입력 받기
  • 각 글자의 반복 횟수 및 문자열 받기
  • 각 문자열을 1개씩 쪼개 반복후 결과 변수에 추가
  • 결과 변수 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B2_02675번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 케이스 수를 입력 받기
            int c = int.Parse(Console.ReadLine());

            string result = "";

            for (int i = 0; i < c; i++)
            {
                string[] s = Console.ReadLine().Split();

                // 한글자씩 나눠 result에 추가
                foreach (char s2 in s[1])
                {
                    for (int j = 0; j < int.Parse(s[0]); j++)
                    {
                        result += Convert.ToString(s2);
                    }
                }
                Console.WriteLine(result);
                result = "";
            }
        }
    }
}

// 2675번 문자열 반복
// https://www.acmicpc.net/problem/2675
반응형
반응형

1. 문제

- [백준 C#] 1152번 단어의 개수 (C#)  (https://www.acmicpc.net/problem/1152)

 

 

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

 

 

2. 문제 포인트

  • 문장을 공백 단위로 분할하여 리스트로 입력 받기
  • 공백이 있는 경우 내용이 없는 요소가 있을 수 있어 RemoveAll(string.IsNullOrEmpty)로 빈 요소를 제거
  • 리스트의 요소 개수 출력

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;

namespace B2_01152번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 문장을 리스트에 단어 단위로 나눠 입력받기
            List<string> str = new List<string>(Console.ReadLine().Split());

            // 리스트에 있는 내용없는 요소를 모두 삭제
            // remove는 처음부터 탐색하여 빈값 or null을 하나만 삭제하고 종료
            // 따라서 RemoveAll()로 삭제해줘야 함
            str.RemoveAll(string.IsNullOrEmpty);



            // 배열 개수(단어 개수) 출력
            Console.WriteLine(str.Count);
        }
    }
}

// 1152번 단어의 개수
// https://www.acmicpc.net/problem/1152
반응형
반응형

1. 문제

- [백준 C#] 4673번 셀프 넘버 (C#)  (https://www.acmicpc.net/problem/4673)

 

 

셀프 넘버는 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보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 입력 없음
  • 숫자를 입력 받아 셀프 넘버인지 확인하는 함수 생성
  • 1~10000까지의 숫자가 있는 리스트에서 셀프넘버는 삭제(remove())
  • 리스트 출력

 

 

반응형

 

 

3. 전체 코드

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

namespace S5_04673번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 1부터 10000까지의 리스트를 생성
            List<int> result = new List<int>(Enumerable.Range(1, 10000));

            // 셀프 넘버를 계산해서 result 리스트에서 제거
            for (int i = 0; i < 10000; i++)
            {
                result.Remove(self_number(i));
            }

            Console.WriteLine(string.Join("\n", result));
        }

        // 함수 생성
        private static int self_number(int i)
        {
            i += 1;
            // 자리수별 슬라이싱을 위해 string으로 변경
            string str_i = i.ToString();
            int num = i;
            // 각 자리수를 다 더하기
            // 10의 자리, 100의 자리등으로 나누지 않기 위해 슬라이싱 사용
            for (int j = 0; j < str_i.Length; j++)
            {
                num += int.Parse(str_i[j].ToString());
            }
            
            // 함수 계산 결과값 return
            return num;
        }
    }
}

// 4673번 셀프 넘버
// https://www.acmicpc.net/problem/4673
반응형
반응형

1. 문제

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

 

 

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

 

 

2. 문제 포인트

  • 한수 정의 및 알고리즘
    1  =  한수 (숫자가 1개인 등차수열)
    11 ~ 99  =  한수  (숫자가 2개이기에 어떤수든 공차가 될 수 있음, 공차 0~9)
    100 ~ 999  =  각 자리수간의 공차 계산필요
    1000  = 한수 아님 (문제에서 1000까지의 한수 개수를 구해야 하기에 예외 처리 필요)
  • 숫자 하나 입력 받기
  • 한수를 계산하는 함수 만들기
  •  

 

 

반응형

 

 

3. 전체 코드

using System;

namespace S4_01065번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 한수의 개수
            int cnt = 0;

            int a = int.Parse(Console.ReadLine());

            for (int i = 1; i <= a; i++)
            {
                if (calc_num(i))
                {
                    cnt += 1;
                }
            }

            Console.WriteLine(cnt);
        }

        private static bool calc_num(int num)
        {
            // 100보다 작으면 무조건 등차수열이다
            if (num < 100)
            {
                return true;
            }
            // 문제는 1000이하의 숫자
            else if (num < 1000)
            {
                string str_num = num.ToString();

                // 일의 자리 수와 십의 자리수의 차이, 십의 자리수와 백의 자리수의 차이가 같으면 등차수열로 볼 수 있다
                if (int.Parse(str_num[2].ToString()) - int.Parse(str_num[1].ToString()) == int.Parse(str_num[1].ToString()) - int.Parse(str_num[0].ToString()))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            // 1000이 들어온 경우 등차수열되 성립되지 않음으로 무조건 false
            else
            {
                return false;
            }
        }
    }
}

// 1065번 한수
// https://www.acmicpc.net/problem/1065
반응형
반응형

1. 문제

- [백준 C#] 10818번 최소, 최대 (C#)  (https://www.acmicpc.net/problem/10818)

 

 

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 숫자의 개수 입력받기
  • 최대, 최소를 구할 숫자들을 각각 리스트로 입력 받기
  • min(), max()를 이용해 최대, 최솟값 출력하기

 

 

반응형

 

 

3. 전체 코드

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

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

            // 열거형 List로 입력 받기
            List<int> num = new List<int> (Array.ConvertAll(Console.ReadLine().Split(), int.Parse));

            // Min(), Max()로 최대 최솟값 구하기
            Console.WriteLine(num.Min() + " " + num.Max());
        }
    }
}

// 10818번 최소, 최대
// https://www.acmicpc.net/problem/10818
반응형
반응형

1. 문제

- [백준 C#] 2562번 최댓값 (C#)  (https://www.acmicpc.net/problem/2562)

 

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

 

 

2. 문제 포인트

  • 숫자 9개를 반복문으로 입력 받는다
  • 입력 받은 숫자중 최댓값을 출력한다
  • 최댓값의 인덱스를 출력한다 (index 시작은 1부터 시작해야 한다)

 

 

반응형

 

 

3. 전체 코드

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

namespace B3_02562번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> num = new List<int>();
            
            // 9번 반복하며 num에 원소를 하나씩 추가한다
            for (int i = 0; i < 9; i++)
            {
                num.Add(int.Parse(Console.ReadLine()));
            }

            // num의 원소중 가장 큰 값을 출력
            Console.WriteLine(num.Max());
            
            // mum의 가장 큰 원소의 인덱스값 출력
            Console.WriteLine(num.IndexOf(num.Max()) + 1 );
        }
    }
}

// 2562번 최댓값
// https://www.acmicpc.net/problem/2562

 

반응형
반응형

1. 문제

- [백준 C#] 8958번 OX 퀴즈 (C#)  (https://www.acmicpc.net/problem/8958)

 

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 케이스 수 입력 받기
  • OX결과값을 입력 받기
  • 'X'를 기준으로 문자열을 나눠 각 요소별로 'O'의 연속 개수를 카운팅하여 점수 계산

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;

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

            for (int i= 0; i < cnt; i++)
            {
                // 'X'를 기준으로 리스트를 나누기
                List<string> ans = new List<string>(Console.ReadLine().Split('X'));
                score = 0;

                // 각 요소(연속된 'O'의 묶음)의 개수를 이용해 점수 계산
                for (int j= 0; j < ans.Count; j++)
                {
                    for (int k= 1; k <= ans[j].Length; k++)
                    {
                        score += k;
                    }
                }
                // 입력된 결과같에 대한 점수 출력
                Console.WriteLine(score);
            }
            
        }
    }
}

// 8958번 OX퀴즈
// https://www.acmicpc.net/problem/8958
반응형
반응형

1. 문제

- [백준 C#] 4344번 평균은 넘겠지 (C#)  (https://www.acmicpc.net/problem/4344)

 

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

 

 

2. 문제 포인트

  • 테스트 케이스 수 입력 받기
  • 각 케이스마다 학생수 및 성적 입력 받기
  • 각 케이스별 성적 평균을 계산해 전체 학생중 평균 넘는 사람의 숫자를 백분율로 표시 (소수점 3자리)

 

 

반응형

 

 

3. 전체 코드

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

namespace B1_04344번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt_class = int.Parse(Console.ReadLine());
            float student_num = 0;

            for (int i = 0; i < cnt_class; i++)
            {
                List<float> list = new List<float>( Array.ConvertAll(Console.ReadLine().Split(), float.Parse));
                student_num = list[0];
                list.Remove(list[0]);

                // 람다식을 이용해 평균 성적보다 높은 점수들의 리스트를 구한다
                list = list.Where(n => n > list.Average()).ToList();

                // String.Format()을 이용하여 소수점 3자리까지만 출력
                Console.WriteLine(String.Format("{0:0.000}%", list.Count() / student_num * 100));

            }
        }
    }
}

// 4344번 평균은 넘겠지
// https://www.acmicpc.net/problem/4344
반응형

+ Recent posts