https://www.acmicpc.net/problem/11654
11654번: 아스키 코드
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
아스키 코드란?
아스키는 영문 알파벳을 사용하는 대표적인 문자 인코딩을 말한다.
아스키는 통신장비나 컴퓨터 등 문자를 사용하는 많은 장치에서 사용되며,
대부분의 문자 인코딩이 아스키에 기초를 두고 있다.
아스키는 총 128개로 이루어져 있지만,
실제로 출력 가능한 문자들은 다음과 같다.
알파벳대소문자 52개 / 숫자 10개 / 특수문자 32개 / 공백문자 1개
위 문제는 문자를 int로 형변환 하면 아스키 값이 나온다는 것을 알고
간단하게 구현했다
char a = Convert.ToChar(ReadLine());
WriteLine(Convert.ToInt32(a));
이게 좀 중요한데,
Char(문자) -> int로 형변환 : 아스키 코드로 반환
String(문자열) -> int로 형변환 : int로 반환
그러면 Char형식을 string처럼 정상적인 정수로 출력하려면??
단순하게 Char형식 변수를 int.Parse()로 형변환 하면 되겠지 싶지만
위에서 언급한 것 처럼 Char을 int로 형변환하면 아스키 코드로 반환된다.
자세히 ↓
char형식을 int로 형변환 하면 아스키 코드가 반환된다
이 때 int.Parse()는 애초에 컴파일 오류가 나고,
강제로 (int)로 형변환 시키면 아스키 코드가 반환된다
char c = "5"
int i = int.Parse(c); // 오류 빨간줄
int i = (int) c; // 아스키 코드 53 출력 !!
ex)
string s = "5" 를 int로 형변환 하면 int i = 5가 되지만,
char형식을 int로 강제형변환 하면, 아스키 코드가 나온다!
그러면 Char형식을 string처럼 정상적인 정수로 출력하는 방법은 두가지가 있다
Char형식을 아스키 코드가 아닌 정상적인 정수로 출력하는 방법
1. char -> string -> int 순으로 형변환 하는 방법과,
int i = int.Parse(chars[i].Tostring());
2. Char.GetNumericeValue() -> (int) 형변환 하는 방법이 있다
(int)Char.GetNumericValue(c);
static void Main(string[] args)
{
char a = Convert.ToChar(ReadLine());
WriteLine(Convert.ToInt32(a));
}
Char.GetNumericeValue()
입력을 받은 문자열은 배열형태처럼 저장되기 때문에
[숫자] 의 형태로 해당위치의 글자를 가져올 수 있다.
또한, string은 int.Parse를 사용해서 int로 변경할 수 있었지만,
딱 한글자만 존재하는 Char 형식인 경우에는
(int)Char.GetNumericValue(b[2])
다음과 같은 방식으로 int형태로 바꿔줄 수 있다.
int.Parse를 암기하는 것처럼, 그냥 외우면 된다..
이 두가지 방법을 활용한 간단한 예제를 확인하고 싶으면 이전에 쓴 글에서 확인 할 수 있다
https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
이번 문제도 위에서 작성한 원리가 그대로 적용된다.
정리하기 전에 이걸 생각안하고 char을 그대로 int로 형변환해서 자꾸 아스키 코드값이 나왔었다.
1. char -> string -> int 순으로 형변환 하는 방법
(1) String 형식 입력값을 공백없이 나누고 char형식 배열의 요소로 다루기 ( = Char형식)
static void Main(string[] args)
{
int nums = int.Parse(ReadLine());
string s = ReadLine();
char[] chars= s.ToCharArray();
int sum = 0;
for(int i = 0; i < nums; i++)
{
sum += int.Parse(chars[i].ToString());
}
WriteLine(sum);
}
(2) 굳이 char[] 을 만들지 않고 string s 의 인덱스를 이용 ( = Char형식)
static void Main(string[] args)
{
int nums = int.Parse(ReadLine());
string s = ReadLine();
int sum = 0;
for(int i = 0; i < nums; i++)
{
sum += int.Parse(s[i].ToString());
}
WriteLine(sum);
}
(3) ElementAt<>()사용 ( = Char형식)
for(int i = 0; i < nums; i++)
{
sum += int.Parse(s.ElementAt(i).ToString());
}
(!)(2)(3)은 사실 다 거기서 거기다..
2. Char.GetNumericeValue() -> (int) 형변환 하는 방법
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
char[] s = Console.ReadLine().ToCharArray();
int answer = 0;
for (int i = 0; i < s.Length; i++)
{
answer += (int)Char.GetNumericValue(s[i]);
}
Console.WriteLine(answer);
https://www.acmicpc.net/problem/2743
2743번: 단어 길이 재기
알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
Length
static void Main(string[] args)
{
string s = ReadLine();
WriteLine(s.Length);
}
https://www.acmicpc.net/problem/9086
9086번: 문자열
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으
www.acmicpc.net
1. ElementAt<>(Index index)
매개변수로 인덱스가 들어가고, 해당 인덱스의 요소를 반환한다
이 메소드는 문자열 뿐만 아니라 컬렉션에도 사용가능하다
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
for(int i = 0; i < n; i++)
{
string s = ReadLine();
Write(s.ElementAt(0));
WriteLine(s.ElementAt(s.Length - 1));
}
}
2. Fist<>() , Last<>()
첫번째 요소, 마지막 요소를 반환한다. 마찬가지로 컬렉션에도 사용 가능하다
배열 사용 예시:
int[] numbers = { 9, 34, 65, 92, 87, 435, 3, 54,
83, 23, 87, 435, 67, 12, 19 };
int first = numbers.First();
Console.WriteLine(first)
/*
This code produces the following output:
9
*/
문제풀이 :
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
for(int i = 0; i < n; i++)
{
string s = ReadLine();
Write(s.First());
WriteLine(s.Last());
}
}
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
IndexOf(원하는값)
: 매개변수가 있는 첫번째 위치의 인덱스를 반환 , 만약 없으면 -1 반환

마찬가지로 아스키 코드 문제이다
문자열을 입력받고 a~z각각의 알파벳이 포함된 첫번째 인덱스를 출력해야하는데,
IndexOf('a') .. b..c...d..... 를 일일이 할 순 없으므로 아스키 값을 활용한 반복문으로 구현했다
추가로 문제에서 알파벳이 입력받은 문자열에 포함되어있지 않으면 -1을 출력하라 하는데,
코드를 돌려보니 IndexOf는 기본적으로 포함되어 있지 않을 시 -1을 출력해줘서 따로 조건문을 넣어줄 필요가 없었다
WriteLine()문이 알파벳 개수만큼 26번 출력되므로 시간을 줄이기 위해 StirngBuilder를 사용했다
Char c = 'a'
WriteLine(Covert.ToInt32(c)); 를 출력해보면 a = 97, z = 122의 아스키 값을 갖는것을 알 수 있다
static void Main(string[] args)
{
//97-122
string s= ReadLine();
StringBuilder sb = new StringBuilder();
for (int i = 97; i <=122; i++)
{
sb.Append(s.IndexOf(Convert.ToChar(i)) + " ");
}
WriteLine(sb);
}
https://www.acmicpc.net/problem/2675
2675번: 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다
www.acmicpc.net
1. 내가 푼 코드
3중포문이 상당히 거슬린다
using System;
using System.Text;
using static System.Console;
namespace Baekjoon
{
class MainApp
{
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
StringBuilder stringBuilder= new StringBuilder();
for(int i = 0; i < n; i++)
{
String[] s = ReadLine().Split();
int repeat = int.Parse(s[0]);
string text = s[1];
foreach(char c in text)
{
for(int j = 0; j < repeat; j++)
{
stringBuilder.Append(c);
}
}
stringBuilder.Append("\n");
}
WriteLine(stringBuilder.ToString());
}
}
}
2. 다른사람코드
StringBuilder의 Append()
첫번째 매개변수에 StringBuilde에 추가할 값, 그리고 두번째 매개변수에 반복횟수를 추가할 수 있다
이렇게 해서 2중포문으로 줄일 수 있다

using System;
using System.Text;
namespace Backjoon_7_4_2675_repeatString {
class Program {
static void Main(string[] args)
{
int testCount = int.Parse(Console.ReadLine());
StringBuilder output = new StringBuilder();
for (int i = 0; i < testCount; i++)
{
string[] testCases = Console.ReadLine().Split(' ');
int spellRepeatCount = int.Parse(testCases[0]);
string testString = testCases[1];
for (int j = 0; j < testString.Length; j++)
{
output.Append(testString[j], spellRepeatCount);
}
output.Append("\n");
}
Console.WriteLine(output.ToString());
}
}
}
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
1. 내가푼코드
오래걸렸지만 이중 포문을 피하면서 잘 푼 것 같다 (아마도..)
1.입력값을 대문자로 전환
2. 0~25까지의 int형 배열 count 을 만들고 (알파벳 개수 26)
3. 입력된 문자열의 요소를 for문으로 돌며
count[(int)s[i] - 65]++;
(int)s[i]이 Z라면 아스키값이 90이므로 90-65 = 25를 count[]의 인덱스로 활용하며 해당인덱스 값을 +1
4. count[]배열을 반복문돌리고 가장 높은 값을 찾을경우
(1) maxCount ++
(2)Convert.ToChar((i + 65) // 문자 Z를
stringBuilder에 담기
5. 최종으로 maxCount가 1일 경우에만 stringBuilder 출력, 아닐경우 ?출력
static void Main(string[] args)
{
//65-90
string s = ReadLine().ToUpper();
StringBuilder stringBuilder= new StringBuilder();
int[] count = new int[26];
int maxCount = 0;
for (int i = 0; i < s.Length; i++)
{
count[(int)s[i] - 65]++;
}
for (int i = 0; i < count.Length; i++)
{
if (count[i] == count.Max())
{
maxCount++;
stringBuilder.Append(Convert.ToChar((i + 65)));
}
}
if (maxCount == 1)
{
WriteLine(stringBuilder.ToString());
}
else
WriteLine("?");
}
2. chatGPT가 푼 코드
class Program
{
static void Main(string[] args)
{
// 사용자로부터 문자열 입력 받기
Console.Write("알파벳 대소문자로 된 단어를 입력하세요: ");
string input = Console.ReadLine();
// 입력 문자열에서 공백과 구두점 제거 후 소문자로 변경
string cleanedInput = new string(input.Where(c => Char.IsLetter(c)).ToArray()).ToLower();
// 각 알파벳이 나타난 횟수를 계산
int[] counts = new int[26];
foreach (char c in cleanedInput)
{
counts[c - 'a']++;
}
// 가장 많이 나타난 알파벳 찾기
int maxCount = counts.Max();
int maxIndex = Array.IndexOf(counts, maxCount);
// 결과 출력
Console.WriteLine("가장 많이 사용된 알파벳: " + (char)(maxIndex + 'a'));
}
}
위 코드는 입력 문자열에서 공백과 구두점을 제거한 후, 각 알파벳이 나타난 횟수를 계산합니다. 그리고 가장 많이 나타난 알파벳의 인덱스를 찾아서 해당 알파벳을 출력합니다. 이때, 알파벳을 인덱스와 연결하기 위해 ASCII 코드를 이용하며, char 타입으로 변환하여 출력합니다.
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
static void Main(string[] args)
{
string[] s = ReadLine().Split();
int result = s.Length;
if (s[0] == "" )
{
result--;
}
if (s[s.Length-1] == "")
{
result--;
}
Write(result);
}
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
using System;
using System.Text;
using static System.Console;
namespace Backjoon_7_4_2675_repeatString
{
class Program
{
static void Main(string[] args)
{
//65 -90
string s = ReadLine();
WriteLine(Sec(s));
}
static int Sec(string s)
{
int sum = 0;
for(int i = 0; i < s.Length; i++)
{
switch (s[i])
{
case <= 'C':
sum += 3;
break;
case <= 'F':
sum += 4;
break;
case <= 'I':
sum += 5;
break;
case <= 'L':
sum += 6;
break;
case <= 'O':
sum += 7;
break;
case <= 'S':
sum += 8;
break;
case <= 'V':
sum += 9;
break;
case <= 'Z':
sum += 10;
break;
}
}
return sum;
}
}
}
case문을 조건을 저렇게 쓸거라고 생각못했다.
A-Z : 아스키 65-90 이므로
s[i]를 int형변환 후
switch((int)s[i])
{
case 65: case 66: case 67:
sum+= 3;
break;
}
이렇게 쓰는 거라 생각했는데 이것도
case <= 67이렇게 쓰면되고,
굳이 형변환 할 필요없이
switch (s[i])
{
case <= 'C' :
sum+=3;
break;
}
해주면 문자지만 <= 가 사용가능하다..
https://www.acmicpc.net/problem/11654
11654번: 아스키 코드
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
아스키 코드란?
아스키는 영문 알파벳을 사용하는 대표적인 문자 인코딩을 말한다.
아스키는 통신장비나 컴퓨터 등 문자를 사용하는 많은 장치에서 사용되며,
대부분의 문자 인코딩이 아스키에 기초를 두고 있다.
아스키는 총 128개로 이루어져 있지만,
실제로 출력 가능한 문자들은 다음과 같다.
알파벳대소문자 52개 / 숫자 10개 / 특수문자 32개 / 공백문자 1개
위 문제는 문자를 int로 형변환 하면 아스키 값이 나온다는 것을 알고
간단하게 구현했다
char a = Convert.ToChar(ReadLine());
WriteLine(Convert.ToInt32(a));
이게 좀 중요한데,
Char(문자) -> int로 형변환 : 아스키 코드로 반환
String(문자열) -> int로 형변환 : int로 반환
그러면 Char형식을 string처럼 정상적인 정수로 출력하려면??
단순하게 Char형식 변수를 int.Parse()로 형변환 하면 되겠지 싶지만
위에서 언급한 것 처럼 Char을 int로 형변환하면 아스키 코드로 반환된다.
자세히 ↓
char형식을 int로 형변환 하면 아스키 코드가 반환된다
이 때 int.Parse()는 애초에 컴파일 오류가 나고,
강제로 (int)로 형변환 시키면 아스키 코드가 반환된다
char c = "5"
int i = int.Parse(c); // 오류 빨간줄
int i = (int) c; // 아스키 코드 53 출력 !!
ex)
string s = "5" 를 int로 형변환 하면 int i = 5가 되지만,
char형식을 int로 강제형변환 하면, 아스키 코드가 나온다!
그러면 Char형식을 string처럼 정상적인 정수로 출력하는 방법은 두가지가 있다
Char형식을 아스키 코드가 아닌 정상적인 정수로 출력하는 방법
1. char -> string -> int 순으로 형변환 하는 방법과,
int i = int.Parse(chars[i].Tostring());
2. Char.GetNumericeValue() -> (int) 형변환 하는 방법이 있다
(int)Char.GetNumericValue(c);
static void Main(string[] args)
{
char a = Convert.ToChar(ReadLine());
WriteLine(Convert.ToInt32(a));
}
Char.GetNumericeValue()
입력을 받은 문자열은 배열형태처럼 저장되기 때문에
[숫자] 의 형태로 해당위치의 글자를 가져올 수 있다.
또한, string은 int.Parse를 사용해서 int로 변경할 수 있었지만,
딱 한글자만 존재하는 Char 형식인 경우에는
(int)Char.GetNumericValue(b[2])
다음과 같은 방식으로 int형태로 바꿔줄 수 있다.
int.Parse를 암기하는 것처럼, 그냥 외우면 된다..
이 두가지 방법을 활용한 간단한 예제를 확인하고 싶으면 이전에 쓴 글에서 확인 할 수 있다
https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
이번 문제도 위에서 작성한 원리가 그대로 적용된다.
정리하기 전에 이걸 생각안하고 char을 그대로 int로 형변환해서 자꾸 아스키 코드값이 나왔었다.
1. char -> string -> int 순으로 형변환 하는 방법
(1) String 형식 입력값을 공백없이 나누고 char형식 배열의 요소로 다루기 ( = Char형식)
static void Main(string[] args)
{
int nums = int.Parse(ReadLine());
string s = ReadLine();
char[] chars= s.ToCharArray();
int sum = 0;
for(int i = 0; i < nums; i++)
{
sum += int.Parse(chars[i].ToString());
}
WriteLine(sum);
}
(2) 굳이 char[] 을 만들지 않고 string s 의 인덱스를 이용 ( = Char형식)
static void Main(string[] args)
{
int nums = int.Parse(ReadLine());
string s = ReadLine();
int sum = 0;
for(int i = 0; i < nums; i++)
{
sum += int.Parse(s[i].ToString());
}
WriteLine(sum);
}
(3) ElementAt<>()사용 ( = Char형식)
for(int i = 0; i < nums; i++)
{
sum += int.Parse(s.ElementAt(i).ToString());
}
(!)(2)(3)은 사실 다 거기서 거기다..
2. Char.GetNumericeValue() -> (int) 형변환 하는 방법
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
char[] s = Console.ReadLine().ToCharArray();
int answer = 0;
for (int i = 0; i < s.Length; i++)
{
answer += (int)Char.GetNumericValue(s[i]);
}
Console.WriteLine(answer);
https://www.acmicpc.net/problem/2743
2743번: 단어 길이 재기
알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
Length
static void Main(string[] args)
{
string s = ReadLine();
WriteLine(s.Length);
}
https://www.acmicpc.net/problem/9086
9086번: 문자열
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으
www.acmicpc.net
1. ElementAt<>(Index index)
매개변수로 인덱스가 들어가고, 해당 인덱스의 요소를 반환한다
이 메소드는 문자열 뿐만 아니라 컬렉션에도 사용가능하다
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
for(int i = 0; i < n; i++)
{
string s = ReadLine();
Write(s.ElementAt(0));
WriteLine(s.ElementAt(s.Length - 1));
}
}
2. Fist<>() , Last<>()
첫번째 요소, 마지막 요소를 반환한다. 마찬가지로 컬렉션에도 사용 가능하다
배열 사용 예시:
int[] numbers = { 9, 34, 65, 92, 87, 435, 3, 54,
83, 23, 87, 435, 67, 12, 19 };
int first = numbers.First();
Console.WriteLine(first)
/*
This code produces the following output:
9
*/
문제풀이 :
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
for(int i = 0; i < n; i++)
{
string s = ReadLine();
Write(s.First());
WriteLine(s.Last());
}
}
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
IndexOf(원하는값)
: 매개변수가 있는 첫번째 위치의 인덱스를 반환 , 만약 없으면 -1 반환

마찬가지로 아스키 코드 문제이다
문자열을 입력받고 a~z각각의 알파벳이 포함된 첫번째 인덱스를 출력해야하는데,
IndexOf('a') .. b..c...d..... 를 일일이 할 순 없으므로 아스키 값을 활용한 반복문으로 구현했다
추가로 문제에서 알파벳이 입력받은 문자열에 포함되어있지 않으면 -1을 출력하라 하는데,
코드를 돌려보니 IndexOf는 기본적으로 포함되어 있지 않을 시 -1을 출력해줘서 따로 조건문을 넣어줄 필요가 없었다
WriteLine()문이 알파벳 개수만큼 26번 출력되므로 시간을 줄이기 위해 StirngBuilder를 사용했다
Char c = 'a'
WriteLine(Covert.ToInt32(c)); 를 출력해보면 a = 97, z = 122의 아스키 값을 갖는것을 알 수 있다
static void Main(string[] args)
{
//97-122
string s= ReadLine();
StringBuilder sb = new StringBuilder();
for (int i = 97; i <=122; i++)
{
sb.Append(s.IndexOf(Convert.ToChar(i)) + " ");
}
WriteLine(sb);
}
https://www.acmicpc.net/problem/2675
2675번: 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다
www.acmicpc.net
1. 내가 푼 코드
3중포문이 상당히 거슬린다
using System;
using System.Text;
using static System.Console;
namespace Baekjoon
{
class MainApp
{
static void Main(string[] args)
{
int n = int.Parse(ReadLine());
StringBuilder stringBuilder= new StringBuilder();
for(int i = 0; i < n; i++)
{
String[] s = ReadLine().Split();
int repeat = int.Parse(s[0]);
string text = s[1];
foreach(char c in text)
{
for(int j = 0; j < repeat; j++)
{
stringBuilder.Append(c);
}
}
stringBuilder.Append("\n");
}
WriteLine(stringBuilder.ToString());
}
}
}
2. 다른사람코드
StringBuilder의 Append()
첫번째 매개변수에 StringBuilde에 추가할 값, 그리고 두번째 매개변수에 반복횟수를 추가할 수 있다
이렇게 해서 2중포문으로 줄일 수 있다

using System;
using System.Text;
namespace Backjoon_7_4_2675_repeatString {
class Program {
static void Main(string[] args)
{
int testCount = int.Parse(Console.ReadLine());
StringBuilder output = new StringBuilder();
for (int i = 0; i < testCount; i++)
{
string[] testCases = Console.ReadLine().Split(' ');
int spellRepeatCount = int.Parse(testCases[0]);
string testString = testCases[1];
for (int j = 0; j < testString.Length; j++)
{
output.Append(testString[j], spellRepeatCount);
}
output.Append("\n");
}
Console.WriteLine(output.ToString());
}
}
}
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
1. 내가푼코드
오래걸렸지만 이중 포문을 피하면서 잘 푼 것 같다 (아마도..)
1.입력값을 대문자로 전환
2. 0~25까지의 int형 배열 count 을 만들고 (알파벳 개수 26)
3. 입력된 문자열의 요소를 for문으로 돌며
count[(int)s[i] - 65]++;
(int)s[i]이 Z라면 아스키값이 90이므로 90-65 = 25를 count[]의 인덱스로 활용하며 해당인덱스 값을 +1
4. count[]배열을 반복문돌리고 가장 높은 값을 찾을경우
(1) maxCount ++
(2)Convert.ToChar((i + 65) // 문자 Z를
stringBuilder에 담기
5. 최종으로 maxCount가 1일 경우에만 stringBuilder 출력, 아닐경우 ?출력
static void Main(string[] args)
{
//65-90
string s = ReadLine().ToUpper();
StringBuilder stringBuilder= new StringBuilder();
int[] count = new int[26];
int maxCount = 0;
for (int i = 0; i < s.Length; i++)
{
count[(int)s[i] - 65]++;
}
for (int i = 0; i < count.Length; i++)
{
if (count[i] == count.Max())
{
maxCount++;
stringBuilder.Append(Convert.ToChar((i + 65)));
}
}
if (maxCount == 1)
{
WriteLine(stringBuilder.ToString());
}
else
WriteLine("?");
}
2. chatGPT가 푼 코드
class Program
{
static void Main(string[] args)
{
// 사용자로부터 문자열 입력 받기
Console.Write("알파벳 대소문자로 된 단어를 입력하세요: ");
string input = Console.ReadLine();
// 입력 문자열에서 공백과 구두점 제거 후 소문자로 변경
string cleanedInput = new string(input.Where(c => Char.IsLetter(c)).ToArray()).ToLower();
// 각 알파벳이 나타난 횟수를 계산
int[] counts = new int[26];
foreach (char c in cleanedInput)
{
counts[c - 'a']++;
}
// 가장 많이 나타난 알파벳 찾기
int maxCount = counts.Max();
int maxIndex = Array.IndexOf(counts, maxCount);
// 결과 출력
Console.WriteLine("가장 많이 사용된 알파벳: " + (char)(maxIndex + 'a'));
}
}
위 코드는 입력 문자열에서 공백과 구두점을 제거한 후, 각 알파벳이 나타난 횟수를 계산합니다. 그리고 가장 많이 나타난 알파벳의 인덱스를 찾아서 해당 알파벳을 출력합니다. 이때, 알파벳을 인덱스와 연결하기 위해 ASCII 코드를 이용하며, char 타입으로 변환하여 출력합니다.
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
static void Main(string[] args)
{
string[] s = ReadLine().Split();
int result = s.Length;
if (s[0] == "" )
{
result--;
}
if (s[s.Length-1] == "")
{
result--;
}
Write(result);
}
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
using System;
using System.Text;
using static System.Console;
namespace Backjoon_7_4_2675_repeatString
{
class Program
{
static void Main(string[] args)
{
//65 -90
string s = ReadLine();
WriteLine(Sec(s));
}
static int Sec(string s)
{
int sum = 0;
for(int i = 0; i < s.Length; i++)
{
switch (s[i])
{
case <= 'C':
sum += 3;
break;
case <= 'F':
sum += 4;
break;
case <= 'I':
sum += 5;
break;
case <= 'L':
sum += 6;
break;
case <= 'O':
sum += 7;
break;
case <= 'S':
sum += 8;
break;
case <= 'V':
sum += 9;
break;
case <= 'Z':
sum += 10;
break;
}
}
return sum;
}
}
}
case문을 조건을 저렇게 쓸거라고 생각못했다.
A-Z : 아스키 65-90 이므로
s[i]를 int형변환 후
switch((int)s[i])
{
case 65: case 66: case 67:
sum+= 3;
break;
}
이렇게 쓰는 거라 생각했는데 이것도
case <= 67이렇게 쓰면되고,
굳이 형변환 할 필요없이
switch (s[i])
{
case <= 'C' :
sum+=3;
break;
}
해주면 문자지만 <= 가 사용가능하다..