개선 코드
* 일반 코드
using System;
public class Solution {
public string solution(string my_string) {
char[] chars = my_string.ToLower().ToCharArray();
Array.Sort(chars);
return new string(chars);
}
}
1. 나 : 대문자만 변환 / 모든 문자를 변환해도 괜찮음 (불필요한 조건)
2. string 내장 메서드 사용해서 소문자로 변환
-> 반복문없이 문자열의 문자들 소문자로 변환 가능
+) string의 내장 메서드들
// String 내장 메서드들
my_string.ToLower(); // 소문자 변환
my_string.ToUpper(); // 대문자 변환
my_string.Trim(); // 공백 제거
my_string.Replace('a', 'b'); // 문자 치환
my_string.Substring(0, 5); // 부분 문자열
my_string.Split(','); // 문자열 분할
my_string.Contains("abc"); // 포함 여부
3. char Array를 string으로 변환할 때, 중간 변수 선언 후 대입 x / 바로 반환 가능 !
- 중간 변수 선언 후 대입
string answer = "";
answer = new string(charArray);
return answer;
- 바로 반환
return new string(charArray);
-> return new string(charArray)로 해도 괜찮음

=> 중간 변수 선언 없이 생성자를 바로 return문에서 사용
* LINQ
using System;
using System.Linq;
public class Solution {
public string solution(string my_string) {
return new string(
my_string
.Select(char.ToLower)
.OrderBy(ch => ch)
.ToArray()
);
}
}
- Select(char.ToLower) : 각 문자에 char.ToLower 함수를 적용 (= 소문자로 변환)
* 결과 동일 (람다 표현식 / 메서드 그룹)
cf. 메서드 그룹 = 람다 표현식의 축약형 / 람다 표현식 : 파라미터명을 명확히 하고 싶을 때 사용
my_string.Select(ch => char.ToLower(ch)); // 소문자 변환
my_string.Select(char.ToLower); // 메서드 그룹 사용 (간결)
- OrderBy(ch => ch) : 각 문자를 기준으로 오름차순 정렬
- ToArray() : 결과를 배열(char Array)로 변환
- new string(...) : char 배열을 string으로 변환(= 문자열 생성)
-> 문자열의 각 문자를 소문자로 선택하고, 순서대로 정렬해서, 배열로 만든 다음, 문자열로 변환해라
다시 푼 것
using System;
// 입력 : 영어 대소문자로 이루어진 문자열 my_string
// 출력 : 모두 소문자로 바꿔서, 알파벳 순서대로 정렬한 문자열 answer
// 대문자 구분 : IsUpper (<-> IsLower)
public class Solution {
public string solution(string my_string) {
string answer = "";
// string으로 char변환 : 불가능
// charArray로 반복문
// 인덱스 접근 -> for문
// 와 결과값 ""라고 떴는데, answer을 넣어버렸네...
//char[] charArray = answer.ToCharArray();
char[] charArray = my_string.ToCharArray();
for (int i = 0; i < charArray.Length; i++)
{
// IsUpper은 bool이 아니라고 에러뜸!
//if (charArray[i].IsUpper)
// 아 이게 아니라 char 정적메소드?
//if (charArray[i].IsUpper())
if (char.IsUpper(charArray[i]))
{
// 이것도 마찬가지일듯?
//charArray[i].ToLower();
//char.ToLower(charArray[i]);
char temp = char.ToLower(charArray[i]);
charArray[i] = temp;
}
}
// 앗 이것도 틀림
//charArray.Sort();
Array.Sort(charArray);
// string으로 변환
answer = new string(charArray);
return answer;
}
}
이전에 풀던 것
using System;
// 입력 : 문자열 my_string
// 출력 : 모두 소문자로 바꾸고, 알파벳 순서대로 정렬한 문자열 answer
public class Solution {
public string solution(string my_string) {
string answer = "";
// 아... foreach는 ch에 직접 접근 안 되나? 아무튼 이거 안 됨!
foreach(char ch in my_string)
{
if(ch)
}
return answer;
}
}
1. string은 불변이라 index로 접근해서, char 값 바꾸기 불가능
-> string.ToCharArray() 사용해서 charArray로 변환하기
2. 인덱스 사용 -> foreach말고 for문 사용하기
3. char 대소문자 구분 : char.IsUpper(char c) / char.IsLower(char c)
https://learn.microsoft.com/en-us/dotnet/api/system.char.isupper?view=net-9.0
Char.IsUpper Method (System)
Indicates whether a Unicode character is categorized as an uppercase letter.
learn.microsoft.com
* 사용법
// char : IsUpper(Char)
char.IsUpper(char c)
// string : IsUpper(string, int)
string.IsUpper(string s, int index)
4. IsUpper(char c) / IsLower(char c)는 정적 메서드 !
// 모두 static 메서드
char.IsUpper('A'); // True
char.IsLower('a'); // True
char.IsDigit('5'); // True
char.IsLetter('A'); // True
char.ToUpper('a'); // 'A'
char.ToLower('A'); // 'a'
char.IsWhiteSpace(' '); // True
-> char는 기본 타입(value type)
=> 메서드를 가질 수 없으므로 유틸리티 메서드들을 static으로 제공
cf. string : 참조 타입 -> string_name.ToUpper();로 사용
5. 배열 정렬도 정적 메서드 : Array.Sort(Array array)
6. char 대소문자 변환 : char.ToLower(char c) / char.ToUpper(char c)
7. char.ToLower / char.ToUpper : 새 값을 반환하지만, 원본을 변경하지 않음
-> 반환값을 꼭 받아서 다시 대입하기 !

8. charArray string으로 변환 : string = new string(charArray)
'C# > 복습 완료' 카테고리의 다른 글
| 주사위의 개수 (복습 완료) (0) | 2025.08.21 |
|---|---|
| 직각삼각형 출력하기 (복습 완료) (0) | 2025.08.14 |
| [C#]숨어있는 숫자의 덧셈(1) - 복습 완료 (0) | 2025.08.07 |
| [C#]문자 반복 출력하기 (프로그래머스) - (복습 완료) (0) | 2025.08.07 |