문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
일단 문제를 좀 이상하게 이해한 것 같은데.. 어쨌든 풀었음 ㅎㅎ
<내가 이해한 방식>
- 문제 제한 사항 맨 첫번째를 보면, polynomial에 있는 '수'는 0초과 100미만이라고 되어있다.
나는 이 문장을 polynomial에서 '숫자'에 해당되는, 즉 x의 계수 혹은 상수의 범위가 1부터~ 99까지 라고 이해했다.
(근데 같이 푼 친구에게 물어보니 걔는 polynomial에 있는 덩어리(+연산자로 엮인 하나의 다항식 덩어리)의 수 라고 해석했다.)
-또한 3번째 제한사항은 polynomial에서 '숫자'부분을 담당하는 부분은 0~9의 정수로 '이루어'진다고 했으므로
x의 계수, 혹은 상수는 한자릿수 뿐만 아니라, 두자릿 수 일 수 있다고 생각함. (첫번째 제한사항에서 수의 범위가 1~99까지 이므로)
그래서 해결한 나의 코드는
-x의 계수 혹은 상수가 한자릿수 뿐만 아니라, 두자릿수 일때도 가능하며
-x의 앞에 0이 들어가도 되지만(제한사항에서는 x앞에 0이 없어야 한다는 것으로 해석했으나, 코드를 짜다보니 '0x'와 같은 것도 처리가 가능하게 짤 수 있었다!)
-polynomial이 빈 문자열이면 안 된다. (빈 문자열 넣으면 'NaN'이라고 나옴 ㅡㅡ)
<내가 해결한 방식>
1. 우선 input으로 주어지는 polynomial의 꼬라지를 보니, +연산자로 덩어리가 구분 되었으므로 +를 기준으로 배열을 쪼개준다.
2. 'x'를 포함하는 덩어리만 따로 빈 배열(x_arr)을 생성하고 거기 넣어준다.
3. 상수, 즉 'x'를 포함하지 않는 덩어리들은 상수만 모아두는 배열을 따로 만들어서 거기 넣어준다.
4. x_arr에서 x의 계수는 한자릿수 혹은 두자릿수 이므로, for문으로 요소 하나씩 접근하며 x를 없애줌 + 계수의 합을 구함.
*이때, x의 계수가 '1'이라 '1'이 생략된 경우에는 x앞에 숫자가 아예 없기 때문에 따로 처리해줘야한다.('x'혼자 있으면 계수의 합에 1만 더하는 것으로 처리!)
5. 마지막으로 답을 리턴할때는 조금 지저분하지만 케이스를 분류했다.
---최종 계산한 x 계수의 합이 0이거나 1초과인 수일 때(1이 아닐때)----그 중에서도 상수가 0 일때(' + 0'이 함께 나오면 안 됨)
----그 중에서 x의 계수가 0 일때(이때는 상수만 리턴해야함)
---최종 계산한 x 계수의 합이 1일때----그 중에서도 상수가 0일때(' + 0'이 나오면 안 되므로 따로 처리해줌)
이런식으로 케이스 분류해서 답을 리턴하도록 해줬다!
그리고 진짜 진짜 중요한거... 내가 이걸 못 찾아서 2시간동안 헤맸음 ㅠㅠㅠ.....
마지막에 답을 리턴할때 답을 꼭 'String'으로 변환해줘야 한다.................
처음에 문제를 쭉 읽을 때는 '마지막에 문자열로 변환해줘야겠다!'라고 생각했었는데
코드를 짜다보니 새카맣게 잊어버리고.. 다 짜놓고 보니 대체 뭐가 틀렸지? 하면서 절대 안 보임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
나도 제3자의 눈을 빌려.. 겨우 찾았다 ㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
해결
var polynomial = '1 + 0 + x';
var arr = polynomial.split(' + ');
console.log(arr);
var x_arr = [];
var num_arr = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i].includes('x') === true) {
x_arr.push(arr[i]);
} else {
num_arr.push(arr[i]);
}
}
//계수
var x_num = 0;
for ( var i = 0; i < x_arr.length; i++) {
if (x_arr[i] === 'x') {
x_num += 1;
} else {
x_arr[i] = x_arr[i].replace('x', "")
x_num += parseInt(x_arr[i]);
}
}
//상수
var num = 0;
for (i = 0; i < num_arr.length; i++) {
num += parseInt(num_arr[i]);
}
var answer = '';
if (x_num != 1) {
answer = x_num + 'x' + ' + ' + num;
if (num === 0) {
answer = x_num + 'x';
}
if (x_num === 0) {
answer = num;
}
} else {
answer = 'x' + ' + ' + num;
if (num === 0) {
answer = 'x';
}
}
console.log(String(answer));
이 코드에서 맨 아래 console.log부분만 return으로 바꿔주고,
맨 위 내가 예시로 입력 값 넣은 var polynomial 부분 제외해서 function 안에 넣어주면 된다!
끗.
그나저나 마지막 주 문제들은 상당히 ㅋㅋㅋ 쉽지 않군!
그래도 뭔가 고군분투하면서 배우는게 있으니 너무 재밌당ㅎㅎㅎㅎㅎ
얼른 레벨 2, 3도 고민할 수 있는 능력이 됐으면,,....