| 문제 설명 ❓
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해 보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
| 제한 사항 ❌
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
| 입출력 예 💬
s | result |
"abcabcadc" | "d" |
"abdc" | "abcd" |
"hello" | "eho" |
| 입출력 예 설명 💬
입출력 예 #1
- "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
입출력 예 #2
- "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
입출력 예 #3
- "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
| 풀이 🔥
⚠️ 한 번씩 읽어주세요 ⚠️
제 개인의 풀이 방법이며 틀린 풀이 방법 일수도, 더 나은 풀이법이 존재할 수도 있습니다!
전체 코드는 깃헙 링크 혹은 하단 접은 글을 펼쳐 확인가능하며, 복붙이 아닌 참고용 코드입니다
C++로는 머리를 좀 썼던 문제 같은데 C#은 역시 미리 준비된 기능들이 많다 보니 금방 로직을 생각해 낼 수 있는 게 장점인 거 같습니다. 이 문제에 경우에는 저 같은 경우 Dictionary를 이용해서 문자열 s를 반복문을 도는 동안 s [i] 번째 문자가 Dictionary에 추가되어 있다면 카운트를 증가 아니라면 새롭게 키를 등록하는 식으로 한 번만 등장하는 문자열을 완성시킨 다음에 문자열을 정렬을 하여 문제를 해결하였습니다.
[깃헙 / Github]
😻 댓글과 공감 한 번씩 감사드립니다 😻
| 전체 코드 🔎
더보기
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public string solution(string s) {
string answer = "";
// 문자열의 각 문자와 나타난 횟수를 담기 용이한 Dictionary 사용
Dictionary<char,int> checkDic = new Dictionary<char,int>();
// 문자열의 길이 만큼 반복
for(int i = 0; i < s.Length; i++)
{
// 딕셔너리에 s[i]번째 문자가 이미 추가되었는지 체크
// 추가되어있다면 s[i]를 키로 접근하여 카운트 증가
// 아니라면 checkDic에 Key: s[i] Value : 1로 추가
if(checkDic.ContainsKey(s[i]))
{
checkDic[s[i]]++;
}
else
{
checkDic.Add(s[i],1);
}
}
// 추가된 키 값들로 딕셔너리에 접근하여
// Value가 1인 Key만 따로 answer에 추가
foreach(char Key in checkDic.Keys)
{
if(checkDic[Key] == 1)
{
answer += Key;
}
}
// answer를 정렬
answer = String.Concat(answer.OrderBy(ch => ch));
return answer;
}
}