Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 중복된 단어
- 중첩배열평탄화
- 코딩 어?
- @Moditying @Query
- 배엘에서 스왑
- 문자열순서바꾸기
- ubuntu타임존
- 중첩배열
- 5.3.8 Modifying Queries
- 제로베이스
- 깃 토큰 만료
- 중복 문자열
- js 문자열을 문자배열로
- 객체의 밸류값만 찾기
- 중복문자제거
- 재귀스왑
- 중복단어제거
- indexOf()
- 우분투 시간 변경
- lastIndexOf()
- ...점점점문법
- 프론트엔드 스쿨
- 문자열 중복
- 객체의키값만 찾기
- 시퀄 문법
- 스프링 데이타 JPA
- sql like연산자
- 단어 제거
- 레디스 확인
- sql 문자열 패턴 검색
Archives
- Today
- Total
코딩기록
string) 이어 붙인 수 / filter - 짝수, 홀수 & reduce배열 + 삼항연산자 본문
728x90
문제 설명
정수가 담긴 리스트 nums가 주어집니다. nums의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ nums의 길이 ≤ 10
- 1 ≤ nums의 원소 ≤ 9
- nums에는 적어도 한 개씩의 짝수와 홀수가 있습니다.
입출력 예
nums | result |
[3, 4, 5, 2, 1] | 393 |
[5, 7, 8, 3] | 581 |
입출력 예 설명
입출력 예 #1
- 홀수만 이어 붙인 수는 351이고 짝수만 이어 붙인 수는 42입니다. 두 수의 합은 393입니다.
입출력 예 #2
- 홀수만 이어 붙인 수는 573이고 짝수만 이어 붙인 수는 8입니다. 두 수의 합은 581입니다.
const solution = nums => {
// do something
};
console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581
풀이
1번풀이
1. filter로 짝수, 홀수 나눠서 구하고 join으로 합해서 문자열로 반환.
2. 숫자로 형변환해서 더함.
// 이어 붙인 수
// nums의 홀수만 순서대로 이어 붙인 수와
// 짝수만 순서대로 이어 붙인 수의 합을 return
const solution = nums => {
const num1 = nums.filter(nums => nums % 2 !== 0).join('');
const num2 = nums.filter(nums => nums % 2 === 0).join('');
return Number(num1) + Number(num2);
};
console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581
2번풀이
reduce 배열, 삼항연산자
- 2번째는 reduce를 활용해 누적값 자리에 배열을 넣고 삼항 연산자를 사용해 짝수와 홀수를 구분했다.
- 초기 값으로 ['', '']를 사용하여 각각의 문자열을 빈 문자열로 시작.
- num % 2 === 0 이 코드는 0이면 짝수 0이 아니면 홀수.
- 참이면 [evens + num, odds]
- evens + num: 현재 짝수 값을 문자열로 변환. 기존의 evens 문자열에 추가하고 odds는 변경없음.
- 거짓이면 [evens, odds + num]
- odds + num: 현재 홀수 값을 문자열로 변환하여 기존의 odds 문자열에 추가하고 evens는 변경없음.
- 배열의 모든 요소에 대해 반복하고 나서 짝수, 홀수 문자열이 저장되고 Number()로 정수 형변환하고 더하면 끝.
const solution = nums => {
// ([evens, odds]): 현재까지의 누적 값
// (num): 현재 배열에서 처리하고 있는 요소
const [even, odd] = nums.reduce(([evens, odds], num) =>
num % 2 === 0 ? [evens + num, odds] : [evens, odds + num],
['', '']
);
console.log(even);
console.log(odd);
return Number(even) + Number(odd);
};
console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581
배열 [3, 4, 5, 2, 1] 코드 흐름.
- 초기값: ['', '']
- 3 (홀수): ['', '3']
- 4 (짝수): ['4', '3']
- 5 (홀수): ['4', '35']
- 2 (짝수): ['42', '35']
- 1 (홀수): ['42', '351']
결과적으로 even은 '42', odd는 '351'이 된다.
반응형
'프론트 > JS)코딩테스트' 카테고리의 다른 글
Comments