-
10/18 TIL | Java와 JavaScript 사용해서 코딩테스트 풀기!📝 기록/매일의 기록 2022. 10. 18. 21:00
이번 주는 자바스크립트를 배우는 주간! 그동안 공부해 온 자바와 자바스크립트로 오늘의 1일 1코테는 두 번 풀어보았다!
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.제한 사항
- N의 범위 : 100,000,000 이하의 자연수
입출력 예
N answer 123 6 987 24 나의 문제 풀이
[📃 SolutionTest.java - 테스트 코드]
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class SolutionTest { @Test void split() { Solution solution = new Solution(); Integer[] numbers = {1, 2, 3}; assertArrayEquals(numbers, solution.split(123)); } @Test void sum() { Solution solution = new Solution(); Integer[] numbers = {1, 2, 3}; assertEquals(6, solution.sum(numbers)); } }
N = 123이면 숫자를 다 쪼개서 그 값을 다 더 한 수인 1 + 2 + 3 = 6을 반환하면 된다. 그렇기에 우선 받은 n을 쪼개는 split 함수와 그 split된 값을 합하는 sum 함수를 만들게끔 테스트를 작성하였다.
[📃 Solution.java - 문제 풀이 코드]
import java.util.Arrays; public class Solution { public int solution(int n) { return sum(split(n)); } public Integer[] split(int n) { String number = String.valueOf(n); String[] array = number.split(""); return Arrays.stream(array) .mapToInt(i -> Integer.parseInt(i)) .boxed() .toArray(Integer[]::new); } public int sum(Integer[] numbers) { return Arrays.stream(numbers).mapToInt(i -> i).sum(); } }
실제 코드는 이렇게 작성되었다. Java는 형변환이 자유롭지 않기 때문에 int로 받은 n을 문자열로 바꿔서 split을 사용하여 쪼개 주었고, 그 값을 stream을 활용해 map을 돌면서 integer로 다시 만들었다. 그렇게 만들어진 배열을 sum해서 문제 풀이 완료!
[📃 solution.test.js - 테스트 코드]
import solution from './solution'; test('sum', () => { expect(solution(123)).toBe(6); expect(solution(987)).toBe(24); });
Jest로도 테스트 코드를 작성해보았는데.. 사실 ㅋㅋㅋ 여기는 쪼개서 테스트하지도 않았다.. 이미 자바에서 열심히 쪼갰으니까 자바스크립트는 그냥 냅.다 123 -> 6 / 987 -> 24를 기대합니다! 해버린..ㅋㅋ
[📃 solution.js - 문제 풀이 코드]
// test를 위해 export하였으나 프로그래머스에서 통과하려면 그냥 function만 있어야 한다! export default function solution(n) { return [...`${n}`].map(Number).reduce((a, b) => a + b); }
입력 받은 숫자를 문자열로 바꿀 수 있게 백틱으로 감싸고 전개 연산자로 배열로 바로 만든 후, map을 돌면서 Number로 형 변환하고 reduce로 누산해서 합을 구하게 만들었다!
문제 자체가 어렵지는 않아서 오래 걸리지는 않았지만 확실히 자바스크립트로 풀어야 편하다는 걸 느꼈다.. 자바스크립트만의 자유로움...?
'📝 기록 > 매일의 기록' 카테고리의 다른 글
10/21 TIL | 코드 리뷰는 결국 조직 문화! 《 코드 리뷰를 해야 하나요?》를 듣고. (0) 2022.10.21 10/20 TIL | Daring Greatly. 용기 있게 도전하기. (0) 2022.10.20 10/16 TIL | 왜 콘솔창에서 undefined를 반환할까? (0) 2022.10.17 10/15 TIL | 자바스크립트엔 ESLint가 생명! (2) 2022.10.17 10/14 TIL | The Clean Architecture: Business Logic과 Infrastructure의 완전한 분리 (0) 2022.10.14