Today I Learned
- Programmers 문제 풀기
Programmers 문제 풀기
다항식 더하기
나의 풀이
function solution(polynomial) {
const array = polynomial.split(" ").filter((v) => v !== "+");
const answer = array.reduce((acc, cur) => {
if ( cur.includes("x") ) {
cur.length === 1 ? acc[0] += 1 : acc[0] += parseInt(cur)
} else if ( !isNaN(parseInt(cur)) ) {
acc[1] += parseInt(cur)
}
return acc
}, [0,0])
return (answer[0] ? answer[0] === 1 ? "x" : answer[0] + "x" : "")
+ (answer.includes(0) ? "" : " + ")
+ (answer[1] ? answer[1] : "");
}
풀긴 풀었는데 썩 마음에 드는 풀이는 아니다.
일단 polynomial를 배열로 만든 후에 +를 제외한 요소들만 필터링한다. 그리고 reduce 메서드를 이용해서 initialValue에 [0,0]을설정한 다음에 배열의 각 요소가 일차항인 경우와 상수항인 경우로 나눠서 initialValue에 값을 더해준다. 그리고 reduece 메서드로 만든 배열을 삼항 연산자를 이용해서 다시 문자열 형태의 다항식으로 출력했다.
다른 사람의 풀이
function solution(polynomial) {
const arr = polynomial.split(" + ");
const xNum = arr
.filter(n => n.includes("x"))
.map(n => n.replace('x', '') || '1')
.reduce((acc, cur) => acc + parseInt(cur, 10), 0);
const num = arr
.filter(n => !isNaN(n))
.reduce((acc, cur) => acc + parseInt(cur, 10), 0);
let answer = [];
if(xNum) answer.push(`${xNum === 1 ? "" : xNum}x`);
if(num) answer.push(num);
return answer.join(" + ");
}
참고할 부분
- split을 " "이 아니라 " + "로 하면 배열을 따로 filter할 필요가 없어진다.
- 배열을 따로 만들어서 if문으로 true일 때만 (값이 0이 아닐 때만) push를 하면 삼항 연산자로 예외 처리를 해줄 필요가 없어진다.
- 최종적으로 배열을 " + "로 조인한 문자열을 반환한다!
풀이에서 map을 돌리는데 or 연산자를 사용하는 부분이 이해가 잘 안됐는데 ChatGRT에게 물어본 결과 replace한 결과물이 빈 문자열일 때만 '1'로 대체하는 코드라고 한다.
replace() 함수를 사용해서 배열의 각 요소 n에서 'x'를 제거합니다. 만약 문자열에 'x'가 없다면, 아무 변화 없이 원래 문자열이 그대로 반환됩니다. 만약 제거된 결과가 빈 문자열이라면, 해당 요소를 '1'로 대체합니다. 이때, || 연산자를 사용하여 빈 문자열이면 '1'을 반환합니다.
- false || '' || 0 || null || 'Value!!' || undefined → 결과: 'Value!!'
- false || '' || 1 || null || NaN || undefined → 결과: 1
아마 OR 연산자의 이런 속성을 이용한 거 같다!
회고
오늘은 점핏에 이력서를 등록하고 원티드까지 포함해서 이력서를 5개 정도 넣었다. 근데 이력서 계속 수정하고 면접 준비하는 건 너무 재미없어서 차라리 프로젝트를 하나 시작해 볼까 하는 생각이 든다. 뭔가 생산적이고 재밌는 일을 하고 싶다! 일단 내일은 오후에 인텔리픽 모의면접 일정이 있기 때문에 또 면접 준비를 해야겠다.
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.04.12 Programmers_OX 퀴즈 (0) | 2023.04.12 |
---|---|
[TIL] 2023.04.11 Programmers_최빈값 구하기, 인텔리픽 모의면접 (0) | 2023.04.11 |
[TIL] 2023.04.08 Programmers_문자열 밀기 (0) | 2023.04.08 |
[TIL] 2023.04.06 기술면접 스터디, Programmers 문제 풀기 (0) | 2023.04.06 |
[TIL] 2023.04.05 기술면접 스터디, Programmers 문제 풀기 (0) | 2023.04.05 |
댓글