'전체 글'에 해당되는 글 138건

  1. 2019.09.27 String.Format을 이용하지않은 중앙정렬
  2. 2019.09.27 한글과 영문,숫자의 바이트 인식
  3. 2019.09.27 더하기 사이클
  4. 2019.09.26 switch 문
  5. 2019.09.26 클래식 다이얼
  6. 2019.09.26 돌 게임
  7. 2019.09.25 설탕 배달
  8. 2019.09.25 세 수

String.Format을 이용하지않은 중앙정렬

C#/Problems 2019. 9. 27. 11:45

Console.WriteLine(String.Format("{0,42}", "길동"));

String.Format 메소드를 사용하면 입력하고자 하는 문자열("길동")의 길이를 .Length 를 이용해 자동 인식한다.

자동 인식한 문자열의 길이에서 총길이 (42)에서 문자열 길이만큼을 뺀 나머지를 공백으로 오른쪽을 채워넣는다.

여기서 문제는 자동인식할때 문자열이 한글일때도 한글자당 길이를 1로 인식한다.

자동으로 문자열 길이를 인식하므로 Encoding. Default. GetBytes(문자열) 이 문을 사용해 따로 문자열의 길이를 지정해줄 수가없다. 

따라서 String.Format을 사용하지 않고 임의적으로 공간을 앞에 주는데 그 공간의 갯수는 총 길이 - 문자열바이트값 이다.

앞에 두는 빈공간을 뒤에도 똑같이 두게되면 문자는 중앙으로 오게된다.

총길이가 16칸인 칸에 앞뒤로 같은 빈공간을 두면서 문자를 정렬을 하기위한 식:

int bytelen = Encoding.Default.GetBytes(name[i]).Length;

int padlen = 8 - (bytelen / 2);

하지만 여기서 input 값이 영문일 경우, input의 byte길이 나누기 2를 하는 과정에서 소수가 발생할 수 가있다.

예를 들어 문자열이 영문 "a' 한글자 일때 2를 나누면 0.5가 된다.

여기서 padlen 의 타입은 int이기 때문에 0.5를 1로 반환한다.

1로 반환하게되면 반올림된 0.5의 값이 앞뒤로 두개가 되어 총 길이가 한칸이 늘어나는 현상이 생긴다

bytelen % 2 != 0 일때의 상황을 따로 만들어 뒤에 오는 빈공간이 한칸 줄게 만들어줬다.

if (bytelen % 2 != 0) 
                {
                    Console.WriteLine("{0}", "".PadLeft(padlen) + name[i] + "".PadRight(padlen-1) + "1");
                }
                else 
                {
                    Console.WriteLine("{0}", "".PadLeft(padlen) + name[i] + "".PadRight(padlen) + "1");
                }

:

한글과 영문,숫자의 바이트 인식

C#/Problems 2019. 9. 27. 10:23

format.string 을 이용해 정렬을 하려고 할때 시스템은 한글 한글자와 영문 한글자의 길이를 똑같이 1로 인식해서 정렬할때 문제가 생긴다.

이 문제를 해결하기 위해 새로운 변수를 만들어 그 변수의 값에 input 문자열의 바이트 값을 구하여 padingleft 의 값을 조절해주면 된다.

코드:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _09._27_step1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] name = new string[] { "홍길동" , "길동""abc""ab"};
            
            for (int i = 0; i < name.Length; i++)
            {
                int padlen = 10 - Encoding.Default.GetBytes(name[i]).Length;
                Console.WriteLine("{0}","".PadLeft(padlen)+ name[i]);
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

출력:

 

 

:

더하기 사이클

C#/Algorithm 2019. 9. 27. 09:34

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

예제 입력 1

26

예제 출력 1

4

예제 입력 2

55

예제 출력 2

3

예제 입력 3

1

예제 출력 3

60

코드

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
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _1110
{
    class Program
    {
        static void Main(string[] args)
        {
            string N = Console.ReadLine();
            string fN = N;
            int count = 0;
            if (N.Length < 3 && N.Length > 1)
            {
                while (true)
                {
                    string stra = Convert.ToString(N[0]);
                    int a = Convert.ToInt32(stra);
                    string strb = Convert.ToString(N[1]);
                    int b = Convert.ToInt32(strb);
                    if (a + b < 10)
                    {
                        N = b + Convert.ToString(a + b);
                        count++;
                    }
                    else if (a + b >= 10)
                    {
                        string sum = Convert.ToString(a + b);
                        N = Convert.ToString(b) + sum[1];
                        count++;
                    }
                    if (N == fN)
                    {
                        break;
                    }
                }
                Console.WriteLine(count);
            }
            else if (N.Length == 1)
            {
                N = "0" + N;
                while (true)
                {                    
                    string stra = Convert.ToString(N[0]);
                    int a = Convert.ToInt32(stra);
                    string strb = Convert.ToString(N[1]);
                    int b = Convert.ToInt32(strb);
                    if (a + b < 10)
                    {
                        N = b + Convert.ToString(a + b);
                        count++;
                    }
                    else if (a + b >= 10)
                    {
                        string sum = Convert.ToString(a + b);
                        N = Convert.ToString(b) + sum[1];
                        count++;
                    }
                    if (N == "0" + fN)
                    {
                        break;
                    }
                }
                Console.WriteLine(count);
            }
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

나같은 경우에는 input 값(string)을 int 값으로 한 글자씩 분리 변환하는 과정에서

저장된 input값을 배열을 이용해 각각 한글자씩 char 형태로 분리 --> char 형태의 각각의 글자를 string 형태로 변환 --> 다시 int 값으로 변환해서 식의 값을 구했다. 

함수 식 자체는 어렵지는 않지만 유저의 input값을 숫자형태, 문자열 형태로 자주 바꿔야했다. 

char 형태의 문자열 각각의 문자를 int 로 바꾸는 과정에는 중간에 string 형태로 변환하고나서 int로 변환 해야한다는 사실을 간과해 시간이 조금 걸렸던 문제이다.

(char '1' --> string '1' --> int 1)

하지만 나중에 조사해 본 결과 input 자체를 int로 받고 input / 10 과 input % 10 을 통해 1의 자리 숫자와 10의 자리 숫자를 분리 해서 식을 세우면 코드가 훨씬 짧아진다는 사실을 알았다. 이 방법의 장점은 input이 10보다 작을때 앞에 0을 붙여주는 과정을 생략할 수 있다는 것이다.

참조: https://www.acmicpc.net/problem/1110

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

2920 음계  (0) 2019.10.10
10.07 str.Replace( x, y ) 활용  (0) 2019.10.07
클래식 다이얼  (0) 2019.09.26
돌 게임  (0) 2019.09.26
설탕 배달  (0) 2019.09.25
:

switch 문

C#/실습 2019. 9. 26. 13:14
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _09._26_step1
{
    class Program
    {
        static void Main(string[] args)
        {
            string itemname = "장검";
            /*switch (itemname)
            {
                case "장검":
                    Console.WriteLine("장검을 선택했습니다.");
                    break;
                case "단검":
                    Console.WriteLine("단검을 서낵했습니다.");
                    break;
                default:
                    Console.WriteLine("{0}을 선택할 수 없습니다.", itemname);
                    break;
            }
            */
            /*if (itemname == "장검")
            {
                Console.WriteLine("장검을 선택했습니다");
            }
            else if (itemname == "단검")
            {
                Console.WriteLine("단검을 선택했습니다");
            }
            else
            {
                Console.WriteLine("{0}을 선택했습니다.", itemname);
            }*/
            string input = Console.ReadLine();
            switch(input)
            {
                case "1":
                    Console.WriteLine("안녕하세요");
                    break;
                case "2":
                    Console.WriteLine("반갑습니다");
                    break;
                default:
                    Console.WriteLine("감사합니다.");
                    break;
            }
            Console.WriteLine("성적을 입력하세요");
            string score = Console.ReadLine();
            switch (score)
            {
                case "a":
                    Console.WriteLine("90~100");
                    break;
                case "b":
                    Console.WriteLine("80~89");
                    break;
                case "c":
                    Console.WriteLine("70~79");
                    break;
                case "d":
                    Console.WriteLine("60~69");
                    break;
                case "f":
                    Console.WriteLine(0);
                    break;
            }
            Console.WriteLine("달 입력");
            string month = Console.ReadLine();
            switch (month)
            {
                case "1":
                case "3":
                case "5":
                case "7":
                case "8":
                case "10":
                case "12":
                    Console.WriteLine(31);
                    break;
                case "4":
                case "6":
                case "9":
                case "11":
                case "2":
                    Console.WriteLine(30);
                    break;
                default:
                    Console.WriteLine(-1);
                    break;
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'C# > 실습' 카테고리의 다른 글

10.01 여러 class를 이용해 햄버거 세트 만들기  (0) 2019.10.01
워크래프트 캐릭생성하기  (0) 2019.09.27
09.24 최대공약수 구하기  (0) 2019.09.24
09.23 상점 구매하기 및 판매하기  (0) 2019.09.23
09.20 줄넘기  (0) 2019.09.20
:

클래식 다이얼

C#/Algorithm 2019. 9. 26. 13:10

문제

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

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

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

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

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

입력

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.

출력

첫째 줄에 다이얼을 걸기 위해서 필요한 시간을 출력한다.

예제 입력 1 복사

UNUCIC

예제 출력 1 복사

36

코드

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _5622
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();            
            int sum = 0;
 
            for (int i = 0; i<input.Length; i++)
            {
                if (input[i] == 'A' || input[i]=='B'||input[i]=='C')
                {
                    sum = sum + 3;
                }
                else if (input[i] == 'D' || input[i] == 'E' || input[i] == 'F')
                {
                    sum = sum + 4;
                }
                else if (input[i] == 'G' || input[i] == 'H' || input[i] == 'I')
                {
                    sum = sum + 5;
                }
                else if (input[i] == 'J' || input[i] == 'K' || input[i] == 'L')
                {
                    sum = sum + 6;
                }
                else if (input[i] == 'M' || input[i] == 'N' || input[i] == 'O')
                {
                    sum = sum + 7;
                }
                else if (input[i] == 'P' || input[i] == 'Q' || input[i] == 'R' || input[i] == 'S')
                {
                    sum = sum + 8;
                }
                else if (input[i] == 'T' || input[i] == 'U' || input[i] == 'V')
                {
                    sum = sum + 9;
                }
                else if (input[i] == 'W' || input[i] == 'X' || input[i] == 'Y' || input[i] == 'Z')
                {
                    sum = sum + 10;
                }
            }
            Console.WriteLine(sum);
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

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

10.07 str.Replace( x, y ) 활용  (0) 2019.10.07
더하기 사이클  (0) 2019.09.27
돌 게임  (0) 2019.09.26
설탕 배달  (0) 2019.09.25
세 수  (0) 2019.09.25
:

돌 게임

C#/Algorithm 2019. 9. 26. 13:08

문제

돌 게임은 두 명이서 즐기는 재밌는 게임이다.

탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.

두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.

입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)

출력

상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.

예제 입력 1

5

예제 출력 1

SK

코드

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _9655
{
    class Program
    {
        static void Main(string[] args)
        {
            int input = Convert.ToInt32(Console.ReadLine());
            if (input % 2 == 0)
            {
                Console.WriteLine("CY");
            }
            else
            {
                Console.WriteLine("SK");
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

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

더하기 사이클  (0) 2019.09.27
클래식 다이얼  (0) 2019.09.26
설탕 배달  (0) 2019.09.25
세 수  (0) 2019.09.25
알람시계  (0) 2019.09.25
:

설탕 배달

C#/Algorithm 2019. 9. 25. 16:20

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

예제 입력 1

18

예제 출력 1

4

예제 입력 2

4

예제 출력 2

-1

예제 입력 3

6

예제 출력 3

2

예제 입력 4

9

예제 출력 4

3

예제 입력 5

11

예제 출력 5

3

코드

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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _09._25_step3
{
    class Program
    {
        static void Main(string[] args)
        {                      
            int N = Convert.ToInt32(Console.ReadLine());
            int sum = 0;                       
            if ( N % 5 == 0
            {
                sum = N / 5;
                Console.Write(sum);
 
                }
                else 
            {
                if ((N % 5) % 3 == 0
                {
                    sum = (N / 5+ ((N % 5/ 3); 
                    Console.Write(sum);
 
                    }
                    else  
                {
                    for (int i =0; i <= N/5; i++
                    {
                        if((N - (5 * ((N / 5- i))) % 3 != 0 ) 
                        {
                            if (N/5 - i == 0)
                            {
                                Console.WriteLine(-1);
                            }
                            else 
                            {
                                continue;
                            }
                                                  
                        }
                        
                        else if ((N - (5 * ((N / 5- i))) % 3 == 0)
                        {
                            sum = ((N / 5- i) + ((N-(5*((N / 5- i))) / 3);
                            Console.Write(sum);
 
                                break;
                        }                                                
                    }                    
                }
            }            
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

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

클래식 다이얼  (0) 2019.09.26
돌 게임  (0) 2019.09.26
세 수  (0) 2019.09.25
알람시계  (0) 2019.09.25
윤년  (0) 2019.09.25
:

세 수

C#/Algorithm 2019. 9. 25. 16:17

문제

세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.

예제 입력 1

20 30 10

예제 출력 1

20

예제 입력 2

30 30 10

예제 출력 2

30

예제 입력 3

40 40 40

예제 출력 3

40

예제 입력 4

20 10 10

예제 출력 4

10

코드

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
59
60
61
62
63
64
65
66
67
68
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _09._24_step2
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            string[] array = input.Split(' ');
            int num1 = Convert.ToInt32(array[0]);
            int num2 = Convert.ToInt32(array[1]);
            int num3 = Convert.ToInt32(array[2]);
 
 
            if (num1 > num2 && num1 > num3)
            {
                if (num2 < num3)
                {
                    Console.WriteLine(num3);
                }
                else if (num2 == num3)
                {
                    Console.WriteLine(num2);
                }
                else
                {
                    Console.WriteLine(num2);
                }
            }
            else if (num2 >= num1 && num2 >= num3)
            {
                if (num3 < num1)
                {
                    Console.WriteLine(num1);
                }
                else if (num3 == num1)
                {
                    Console.WriteLine(num3);
                }
                else
                {
                    Console.WriteLine(num3);
                }
            }
            else if (num3 >= num1 && num3 >= num2)
            {
                if (num2 < num1)
                {
                    Console.WriteLine(num1);
                }
                else if (num2 == num1)
                {
                    Console.WriteLine(num2);
                }
                else
                {
                    Console.WriteLine(num2);
                }
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

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

돌 게임  (0) 2019.09.26
설탕 배달  (0) 2019.09.25
알람시계  (0) 2019.09.25
윤년  (0) 2019.09.25
시험 성적  (0) 2019.09.25
: