greenhelix
greenhelix
greenhelix
07-13 04:36
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#43_Code Signal Arcade >> Is Beautiful String
Algorithm/Java

#43_Code Signal Arcade >> Is Beautiful String

2020. 3. 10. 00:00

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \


Is Beautiful String 

아름다운 문자열?? 

 

문자열에서 각 문자들 , 즉 알파벳의 종류가 있는데, a-z까지 순으로 유지되며, 뒷순서의 알파벳은 앞순서의 알파벳의 갯수보다 같거나 작아야 합니다. 

즉, 문자열에서 알파벳 시퀀스가 유지되는지 확인. 

문자열에 해당 알파벳 갯수가 이전 알파벳 갯수보다 많으면 안됩니다. 

1. ABCD  --- >  이런식으로 시퀀스가 있어야하고, 

2. AAABBC ----> 이런식으로, A가 3개 일때, B는 3개 이하여야합니다. C는 B기준으로 B의 갯수보다 이하여야하고요. 

3. BBBCCD ----> 이 경우에는 A 가 빠져 있으므로, 시퀀스가 유지 안됩니다....... 

 

답안을 보겠습니다. 

boolean isBeautifulString(String input) {
    int [] line = new int[26]; 
    for(int i = 0; i<input.length(); i++){ 
        line[input.charAt(i)-'a']++;
    }
    System.out.println(Arrays.toString(line));
    
    for(int a = 1; a < line.length; a++){
        if(line[a-1] < line[a]){
            System.out.println("more than");
            return false;
        }else if(line[a] == 0){
            System.out.println("zero find");
            int zeroSum = 0; 
            for(int z = a; z<line.length; z++){
                zeroSum += line[z]; }
          if(zeroSum == 0){
                System.out.println("after zero all");
                return true;}
        }
    }
    System.out.println("nothing problem");
    return true;
}

알파벳의 갯수만큼 배열의 크기를 선언해줍니다. 그렇게 하여, 각 자리의 알파벳들을 순서대로 넣어줍니다. 

int [] line = new int[26]; 
    for(int i = 0; i<input.length(); i++){ line[input.charAt(i)-'a']++; }

이렇게 하면 각 알파벳 자리의 순서대로 문자열에 있는 알파벳 구성의 횟수대로 들어가게 됩니다. 

이를 통해서, 앞에 순서의 알파벳과 뒤에 순서 알파벳의 관계와 총 시퀀스 유지가 되는지 등 다양한 조건을 확인해줍니다. 

 

반복문과 가정문을 활용하여 조건들의 일치여부를 확인해줍니다. 

for(int a = 1; a < line.length; a++){
        if(line[a-1] < line[a]){ 
            System.out.println("more than");
            return false;
        }else if(line[a] == 0){
            System.out.println("zero find");
            int zeroSum = 0; 
            for(int z = a; z<line.length; z++){
                zeroSum += line[z]; }
          if(zeroSum == 0){
                System.out.println("after zero all");
                return true;}
        }
    }

각 조건문들은 여러 가지 경우에 조건을 걸어서 리턴값을 나오게 하도록 하는 것입니다. 

코드를 보시면 이해될겁니다. 모르겟으면,, 댓글;;

ㅎㅎ 

 

 


이제 엘리트 분들의 답안을 감상하자... 

JAVA

boolean isBeautifulString(String s) {
    int [] c = new int[26];
    
    for (int i : s.getBytes()) c[i-'a'] ++;
    
    for (int i = 1; i < 26; i ++)
        if (c[i] > c[i-1]) return false;
    
    return true;
}

Python3

def isBeautifulString(inputString):

    r = [inputString.count(i) for i in string.ascii_lowercase]
    
    return r[::-1] == sorted(r)

JS

function isBeautifulString(inputString) {
    s = "abcdefghijklmnopqrstuvwxyz"
    for (i = 1; i < s.length; i++) {
        if (inputString.split(s[i]).length-1 > inputString.split(s[i-1]).length-1) {
            return false}}
    return true}

 

 

공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!

부탁드려요 돈드는거 아니잖아요~

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#44_Code Signal Arcade >> Find Email Domain  (0) 2020.03.19
#42_Code Signal Arcade >> Bishop And Pawn  (0) 2020.03.09
#41_Code Signal Arcade >> Digit Degree  (0) 2020.03.08
    'Algorithm/Java' 카테고리의 다른 글
    • #45_Code Signal Arcade >> Build Palindrome
    • #44_Code Signal Arcade >> Find Email Domain
    • #42_Code Signal Arcade >> Bishop And Pawn
    • #41_Code Signal Arcade >> Digit Degree
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바