greenhelix
greenhelix
greenhelix
06-21 04:11
  • 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

#54_Code Signal Arcade >> Sum Up Numbers
Algorithm/Java

#54_Code Signal Arcade >> Sum Up Numbers

2020. 7. 8. 18:35

Code Signal -Arcade

코드시그널

아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 
주로 자바 위주로 풀이를 올릴예정이고,

 

 

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

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


Sum Up Numbers
숫자들을 다 더해라

이 문제는 입력된 문자열 속에서 숫자들을 추출하여 그 숫자들의 합을 구해서 리턴해달라는 문제입니다. 

답안을 보겠습니다. 

 

int sumUpNumbers(String inputString) {
    Matcher check = Pattern.compile("\\d{1,}").matcher(inputString);
    List<String> result = new ArrayList<String>();
    int sum = 0; 
    while(check.find()){ result.add(check.group());}
    for(int i = 0; i<result.size(); i++){
        sum +=Integer.parseInt( result.get(i));
    }
    return sum;
}

코드를 보시면, Matcher 변수에 Pattern.compile()함수를 활용해서 matcher() 함수에 inputString을 매칭 시켰습니다. 

"\\d{1,}"

정규식은 단순히 숫자를 검출하고 그 반복이 1회 이상이 될수 있다는 것입니다. 

이것을 matcher() 함수를 통해 inputString에 적용시기면 아래와 같은 결과가 생기죠. 

test 8을 샘플로 해본 결과

List<String> result = new ArrayList<String>();

 

이제 위와 같이 비어있는 리스트를 하나 선언 해준뒤, while문을 돌리면 됩니다. 

while(check.find()){ result.add(check.group());}

while반복문을 통해 Matcher check에서 find() 를 통해 값이 있는지 확인하고 있으면 result안에 add()해줍니다. 

단, add해주는 대상은 check안에 있는 group()입니다. 

이렇게 하면 위의 문자열에서 숫자들만 뽑아서 리스트안에 값을 넣어주게 됩니다. 

 

System.out.println(result); 를 하게되면 콘솔상에 리스트가 형성되어 있는 것을 확인할 수 있습니다. 

 

이제 끝이 났습니다. 이 리스트의 요소들을 다 더해주는 반복문을 돌리면 끝입니다. 

 


 

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

 

JAVA

int sumUpNumbers(String inputString) {
    Matcher m = Pattern.compile("\\d+").matcher(inputString);
    int sum = 0;
    while( m.find() ){
        sum += Integer.parseInt(m.group(0));
    }
    return sum;
}

이 분은 거의 비슷한 방법을 사용했습니다. group(0)을 사용하면 리스트가 필요하지 않네요. 더 좋은 것같습니다. 

Python3

def sumUpNumbers(inputString):
    l = re.findall(r"\d+",inputString)
    return sum([int(i) for i in l])

JS

function sumUpNumbers(inputString) {
  return (inputString.match(/\d+/g)||[]).reduce((a,b)=>a+ +b,0)
}

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

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

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

#55_Code Signal Arcade >> Different Squares  (0) 2020.07.09
#53_Code Signal Arcade >> Valid Time  (0) 2020.07.07
#52_Code Signal Arcade >> Longest Word  (0) 2020.07.02
    'Algorithm/Java' 카테고리의 다른 글
    • #56_Code Signal Arcade >> Digits Product
    • #55_Code Signal Arcade >> Different Squares
    • #53_Code Signal Arcade >> Valid Time
    • #52_Code Signal Arcade >> Longest Word
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바