문제

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

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

 

두가지 방식으로 풀어보았다. 

1. 예제에 매우 큰수가 들어가기에 string 으로 받을 수를 하나하나 쪼개서 총합을 구함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
 
class Program
{
    static void Main(string[] args)
    {
         int iNum = int.Parse(Console.ReadLine());
        string sNum = Console.ReadLine();
        int total = 0;
        for (int i = 0; i < iNum; i++)
        {
          total += int.Parse(sNum[i].ToString());
        }
        Console.WriteLine(total);
    }
}
cs

해당 방식으로 풀이했을 경우 메모리와 시간

2. Linq 를 사용하여 int 배열로 변환 후 sum() 메서드를 사용.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Linq;
 
class Program
{
    static void Main(string[] args)
    {
        int iNum = int.Parse(Console.ReadLine());
        string sNum = Console.ReadLine();
        int[] arrNum = new int[iNum];
        arrNum = sNum.Select(n=>int.Parse(n.ToString())).ToArray();
        Console.WriteLine(arrNum.Sum());        
    }
}
cs

 

해당 방식으로 풀이했을 경우 메모리와 시간

 

2번 방식이 Linq로 인해 조금 더 느리고 배열 사용으로 메모리를 더 사용하는 걸로 보인다.

 

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

 

문제

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

입력

알파벳 소문자, 대문자, 숫자 0-9 중 하나가 첫째 줄에 주어진다.

출력

입력으로 주어진 글자의 아스키 코드 값을 출력한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
 
class Program
{
    static void Main(string[] args)
    {
        string s= Console.ReadLine();
        printASC(s);
    }
    
    static void printASC(string s)
    {
        Console.WriteLine(Convert.ToInt32(s[0]));
    }
}
cs

 

https://www.acmicpc.net/problem/11654

 

11654번: 아스키 코드

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

www.acmicpc.net

 

문제

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

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

뭔가 더 깔끔하게 할 수 있을거 같은데.. 지저분해졌다..

*등차수열 공식(an = a + (n-1)d) 을 이용하면 더 깔끔하게 수정할 수 있을듯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
       int n = int.Parse(Console.ReadLine());
       Console.WriteLine(HansooCount(n));
    }
    static int HansooCount(int n)
    {
       int result = 0;
       // 1부터 입력받은 n 값까지 반복문
       for(int i = 1; i <= n; i++)
       {
         // 99까진 모두 한수
         if (i < 100) result++;
         else
         {
            string temp = i.ToString(); //자릿수 비교하기 간편하게 스트링으로 컨버트
            int prevTemp = 0//각 자리수의 차를 비교하기 위해 이전 차를 저장하는 변수
            int curTemp = 0//현재 자릿수의 차를 저장하는 변수
            for(int j = 0; j < temp.Length - 1; j++)
            {
              curTemp = int.Parse(temp[j].ToString()) - int.Parse(temp[j + 1].ToString());
              if (j == 0)
              {
                //처음 구한 차는 저장 후 continue
                prevTemp = curTemp;
                continue;
              }
              //이전 값과 현재 값이 같을 경우
              if(prevTemp == curTemp)
              {
                if (j == temp.Length - 2)
                {
                  //마지막 까지 같은 경우 한수이기 때문에 카운트해준다.
                  result++;
                }
                else
                {
                  //마지막 값이 아닌경우 계속 비교하기 위해 continue
                  continue;
                }
              }
              else
              {
                //값이 다를 경우 한수가 아니기에 break;
                break;
              }
            }
           }
         }
            return result;
        }
    
}
cs

+ Recent posts