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에 적용시기면 아래와 같은 결과가 생기죠.
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)
}
공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!
부탁드려요 돈드는거 아니잖아요~
'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 |