티스토리 뷰

초기 선언 : 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인지 아닌지로 구분하는게 더 빠르다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
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
글 보관함