Programmers

Programmers 문제 풀이 41

백단비 2023. 8. 30. 13:47

문제 설명 : 다항식 더하기

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다.

다항식을 계산할 때는 동류항끼리 계산해 정리합니다.

덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때,

동류항끼리 더한 결괏값을 문자열로 return 하도록 하는 solution 함수???

같은 식이라면 가장 짧은 수식을 return 합니다.

 

제한 사항

  • 0 < polynomial에 있는 수 < 100
  • polynomial에 변수는 'x'만 존재합니다.
  • polynomial은 양의 정수, 공백, 'x', '+'로 이루어져 있습니다.
  • 항과 연산기호 사이에는 항상 공백이 존재합니다.
  • 공백은 연속되지 않으며 시작이나 끝에는 공백이 없습니다.
  • 하나의 항에서 변수가 숫자 앞에 오는 경우는 없습니다.
  • " + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않습니다.
  • 0으로 시작하는 수는 없습니다.
  • 문자와 숫자 사이의 곱하기는 생략합니다.
  • polynomial에는 일차 항과 상수항만 존재합니다.
  • 계수 1은 생략합니다.
  • 결과값에 상수항은 마지막에 둡니다.
  • 0 < polynomial의 길이 < 50

 

입출력 예

 

polynomial result
"3x + 7 +x" "4x + 7"
"x + x + x " "3x"

 

문제풀이

 

x의 계수와 숫자를 따로 배열에 담아준 후 각 배열의 원소들을 reduce를 이용해 더해주고,

x의 계수가 들어간 곳은 x를 붙여준 문자열로, 숫자 배열의 원소도 문자열로 만들어주고

두 문자열이 둘 다 ""이 아니면 두 문자열을 더해주고, 둘 중 하나가 ""이면 ""이 아닌 문자열만 반환했다.

function solution(polynomial) {
  var answer = '';
  let arr = polynomial.split(" + ")
  let xArr = []
  let numArr = []
  for(let i = 0; i < arr.length; i++) {
	if(arr[i].includes('x')){
	  if(arr[i] === 'x') {
		xArr.push(1)
	  } else{
		  xArr.push(Number(arr[i].slice(0,(arr[i].length )-1)))
	  }
	} else {
	  numArr.push(Number(arr[i]))
	}
  }
  let xArrSum = ''
  if(xArr.length > 0) {
	if((xArr.reduce((a,b) => a+b)).toString() === '1') {
	  xArrSum = 'x' 
	} else{
		xArrSum = xArr.reduce((a,b) => a+b).toString() + 'x'
	}     
  }
  let numArrSum = ''
  if(numArr.length > 0) {
	numArrSum = (numArr.reduce((a,b) => a+b)).toString()
  }
  if(xArrSum === '') {
	return numArrSum
  }else {
	if(numArrSum === '') {
	  return xArrSum
	}else {
	  return xArrSum + ' + ' + numArrSum
	}
  }
}

 

 


 

 

문제 설명 : 최빈값 구하기

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.

정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 하는 solution함수???

최빈값이 여러개면 -1을 return 합니다.

 

제한 사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

 

입출력 예

 

array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

문제 설명

 

array의 길이가 1이면 그 원소를 반환

new set으로 원소 중복을 없앤 배열을 만든 후

새로운 배열 arr에 set의 원소와 같은 array의 원소의 개수를 같이 넣은 이중 배열을 만들었음

그다음 중복 개수가 많은 순으로 내림차순을 만든 후

중복 개수가 같은 원소가 존재하면 -1을 반환하라고 해서 index 0과 1을 비교한 후 같으면 -1을 반환하고

중복 개수가 같은 원소가 없으면 arr[0][0]을 반환

하지만 테스트 8,9 런타임 에러뜸 

function solution(array) {
  if(array.length === 1) return array[0]
  let set = [...new Set(array)]
  let arr = []
  let count = 0
  for(let i = 0; i <set.length; i++) {
	for(let j = 0; j < array.length; j++) {
	  if(array[j] === set[i]){
		count++
	  }
	}
	arr.push([set[i] , count])
	count = 0
  }
  arr.sort((a,b) => b[1] - a[1])
  if(arr[0][1] === arr[1][1]) return -1
  return arr[0][0]  
}

 

질문하기에서 찾아보니 [1,1,1,1,1] 이런 배열이 존재할 때 런타임 에러가 뜨는 것 같았음 그래서 예외처리를 해주니 문제 해결 완료

function solution(array) {
  if(array.length === 1) return array[0]
  let set = [...new Set(array)]

#예외 처리 코드
  if(set.length === 1) return set[0]

  let arr = []
  let count = 0
  for(let i = 0; i <set.length; i++) {
	for(let j = 0; j < array.length; j++) {
	  if(array[j] === set[i]){
		count++
	  }
	}
	arr.push([set[i] , count])
	count = 0
  }
  arr.sort((a,b) => b[1] - a[1])
  if(arr[0][1] === arr[1][1]) return -1
  return arr[0][0]    
}

 

 

https://www.programmers.co.kr 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

www.programmers.co.kr

 

320x100

'Programmers' 카테고리의 다른 글

Programmers 문제 풀이 40  (0) 2023.08.25
Programmers 문제 풀이 39  (0) 2023.08.24
Programmers 문제 풀이 38  (0) 2023.08.22
Programmers 문제 풀이 37  (0) 2023.08.21
Programmers 문제 풀이 36  (0) 2023.08.08