반응형

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
반응형
반응형

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
반응형

+ Recent posts