728x90

문제

μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμžλ‘œ 된 단어가 주어지면, 이 λ‹¨μ–΄μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λœ μ•ŒνŒŒλ²³μ΄ 무엇인지 μ•Œμ•„λ‚΄λŠ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λŒ€,μ†Œλ¬Έμž ꡬ뢄 X

 

예제 μž…μΆœλ ₯

μž…λ ₯

Mississipi

좜λ ₯

?

 

μ½”λ“œ

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
using namespace std;
 
int main() {
   char word[1000001]={" ",};
   char mostAlpha[26]={" ",};   //μ•ŒνŒŒλ²³ κ°―μˆ˜κ°€ 26κ°œμ΄λ―€λ‘œ
   int repetNum[26]={0,};      //λŒ€λ¬Έμž μ†Œλ¬Έμž ν•©ν•˜λ©΄ 52
   int idx=0,alphaCount=0;
   bool isIncrease=false;
   scanf("%s",word);
   while(word[idx]!='\0'){
           int idxSame=0;
           if(word[idx]>=97) word[idx]-=32;        //μ†Œλ¬ΈμžμΌ κ²½μš° μ•„μŠ€ν‚€μ½”λ“œ 32λ₯Ό λΉΌμ£Όμ–΄ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
        if(alphaCount>=1){
             for(int i=0;i<alphaCount;i++){
                //같은 κ²ƒ μžˆλŠ”지 μ²΄ν¬ λ° κ°™μ€ μžλ¦¬μ˜ λ°°μ—΄ λ²ˆν˜Έ μ €μž₯
                if(word[idx]==mostAlpha[i]){
                  isIncrease=false;
                  idxSame=i;
                  break;
                }
                else{
                   isIncrease=true;
                }
             }
             if(isIncrease){        //for문이 λλ‚˜κ³  alphaCountλ₯Ό λ”ν•΄μ£Όμ–΄μ•Όν•˜κΈ° λ•Œλ¬Έ
                mostAlpha[alphaCount]=word[idx];
                repetNum[alphaCount]=1;
                 alphaCount++;        //그렇지 μ•ŠμœΌλ©΄ λ” λ§Žμ€ for문을 λ°œμƒμ‹œν‚΄
             }
             else
             {
                  repetNum[idxSame]++;    //μ•„λ‹ˆλ©΄μ€ κ°™μ€κ²ƒμ— ++ν•΄μ€Œ
             }
        }
        else
        {
             mostAlpha[0]=word[idx];
             repetNum[0]=1;
             alphaCount++;
        }
        idx++;
   }
   //제일 μˆ«μžκ°€ ν° κ²ƒμ„ λ½‘μŒ
   int mostNum=0,mostNumIdx=0;
   bool isDupli=false;
   for(int i=0;i<alphaCount;i++){
      if(mostNum<repetNum[i]){ 
         mostNum=repetNum[i];
         isDupli=false;            //μ΅œλŒ“κ°’μ΄ λ°”λ€”κ²½μš° false
         mostNumIdx=i;
      }
      else if(mostNum==repetNum[i]&&repetNum[i]>1){
         isDupli=true;            //같은 μ΅œλŒ€κ°’이 μžˆλ‹€λ©΄ true, ν•˜μ§€λ§Œ 1μ΄ˆκ³Όμ—¬μ•Όν•¨
      }
   }
   
   if(isDupli){
      printf("?");
   }
   else{
          printf("%c",mostAlpha[mostNumIdx]);
   }
   return 0;
}
cs

*κ°„λ‹¨ν•œ ν•΄μ„€*

μ•ŒνŒŒλ²³κ°―μˆ˜λ§ŒνΌμ˜ 배열을 λ§Œλ“€μ–΄μ„œ λ¬Έμžμ—΄μ„ μ²΄ν¬ν•˜μ—¬ 갯수만큼 μ €μž₯ν•œ ν›„ 45~56번 λΌμΈμ—μ„œ 제일 큰 μ•ŒνŒŒλ²³μ„ λ½‘λŠ”λ‹€

λ‚˜λ¨Έμ§€λŠ” 주석을 톡해 μ„€λͺ…ν•΄λ†“μ•˜λ‹€

이 μ½”λ“œλ³΄λ‹€ 훨씬 λΉ λ₯Έ 방법이 μžˆμ§€ μ•Šμ„κΉŒ μ‹ΆκΈ΄ν•˜λ‹€

 

*λ©”λͺ¨λ¦¬*

2840KB

*μ‹œκ°„*

36ms

*μ–Έμ–΄*

C++14

*μ½”λ“œκΈΈμ΄*

1878B

*이 λ°©λ²•λ§Œμ΄ λ§žλŠ” 정닡은 μ•„λ‹™λ‹ˆλ‹€.

훨씬 μ’‹κ³  λΉ λ₯Έ λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜ κ³΅λΆ€ν•˜μ‹œλŠ” λΆ„λ“€ ν™”μ΄νŒ…! '0'/*

 

 

 

λ°˜μ‘ν˜•

+ Recent posts