티스토리 뷰
초기 선언 : alphabet[16] int 배열, int max, bool isOne = true;
string으로 값을 받고 string.Length만큼 아래의 반복문을 진행한다. [alphabet에 따라 값을 int배열에 저장할것임]
아스키 코드 상 'Z'보다 작거나 같다면 대문자, 그 외(else)는 소문자다. 이에 맞춰 인덱스를 조정해주고 alphabet 값을 1씩 증가시켜준다.
이제 max값을 찾아야 한다. 배열의 MAx값을 찾아주는 것 + IndexOf로 찾아내면 정말 편리하겠지만 문제는 max값을 가지는 배열의 index가 여러개일 때 ?를 출력해야 한다는 점이다. 그래서 다 해주었다.
처음에 alphabet[0]을 max에 넣어주고 25번 max와 비교한다.
1. max보다 클 경우 : isOne을 참으로 바꿔주고 max에 값 저장
2. max와 같을 경우 : isOne을 거짓으로 바꿈
그러면 이 반복문 이후에 변한 값은 max와 isOne이다.
max값을 가지는 index가 2개 이상이라면(isOne이 False라면) : ?를 출력
isOne이 true라면 : max값을 가지는 index + 'A' 한 후 char 명시적 형변환 하여 출력
하면 끝
string sentence = Console.ReadLine();
int[] alphabet = new int[26];
int max;
bool isOne = true;
for (int i = 0; i < sentence.Length; i++)
{
if (sentence[i] <= 'Z')
alphabet[sentence[i] - 'A']++;
else
alphabet[sentence[i] - 'a']++;
}
max = alphabet[0];
for (int x = 1; x < alphabet.Length; x++)
{
if (max < alphabet[x])
{
if (isOne == false)
isOne = true;
max = alphabet[x];
}
else if (max == alphabet[x])
isOne = false;
}
if (isOne)
Console.WriteLine((char)(Array.IndexOf(alphabet,max) + 'A'));
else
Console.WriteLine("?");
나는 isOne이라는 bool을 관리해서 index가 여러개일 경우에 대처했는데,
마지막에 어차피 index값이 필요하기 때문에 비교할 때 int index 값에 index를 저장하고, 만약 값이 같은 경우(내 코드에서는 inOne이 False가 되는 경우) index값을 -1로 적용하고 마지막에 index값이 -1인지 아닌지로 구분하는게 더 빠르다.
'■ 알고리즘 > ◻ 백준' 카테고리의 다른 글
| [C#]백준 5430번 : AC (0) | 2018.08.14 |
|---|---|
| [C#/C++]백준 10809번 : 알파벳 찾기 (0) | 2018.08.14 |
| [C#]백준 1316번 : 그룹 단어 체커 (0) | 2018.08.13 |
| [C#]백준 2941번 : 크로아티아 알파벳 (0) | 2018.08.13 |
| [C#]백준 1032번 : 명령 프롬프트 (0) | 2018.08.13 |