본문 바로가기
Research/problems

프로그래머스_lv0_문자열 계산하기

by RIEM 2022. 11. 26.
728x90

문제

생각

function solution(my_string) {

    var answer = my_string.split(' ')

var [x, y] = [Number(answer[0]), Number(answer[2])]

var operator = answer[1]

    var result = operator === "+"? x + y : x - y

    return result;

}

 

 

코드 실행에서는 정상적으로 작동하는데 제출하려니 테스트에서 실패한다.

 

어떤 분이 질문하기에 적어둔 글을 보니 2 +2 + 2 와 같이 연산자가 1개 이상일 수도 있다고 한다. 생각해보니 2+2 처럼 문자열이 된 수식이라고 해서 꼭 연산을 1번만 하라는 것은 아니긴 하다.

 

그래서 나는 1 + 2 + 3일 경우 +2, +3을 짝으로 보고, +일 경우 positive array, -일 경우 negative array에 모은 뒤 최종적으로 1 + postivie array - negative array를 하는 방식으로 접근했다.

해결

function solution(my_string) {
	const answer = my_string.split(' ')
	const data = {};
	const positive = [];
	const negative = [];
	
	const firstNum = answer[0];
	answer.shift()
	
	while(answer.length) {
		if(answer[0] === "+") {
			positive.push(answer[1]);
		} else {
			negative.push(answer[1]);
		}
		answer.shift();
		answer.shift();
	}
	
	sumPositive = positive.reduce((a, b) => Number(a) + Number(b), firstNum)
	
	sumNegative = negative.reduce((a, b) => Number(a) + Number(b), 0)
		
	return sumPositive - sumNegative;
}

console.log(solution("3 + 4 + 2 - 2"))

다른 사람의 풀이

var solution=eval

solution에 eval 함수 자체를 대입시켜 풀이했다. eval(input)이 되는 것이다. eval함수는 스트링으로 된 수식을 연산한 값을 리턴하는데, MDN에 따르면 현재 보안상 문제로 사용하지 않을 것을 경고한다.

 

회고

항상 함수 자체를 만들어야한다는 생각 대신 함수 그 자체를 대체할 수 있는 메소드가 있는지 생각해보면 좋을 것 같다.

레퍼런스

 

728x90

댓글