[Code Kata] JavaScript #9

ojae kwon·2021년 5월 10일
  1. 문제

    • 두 개의 input에 복소수가 a+bi(string) 으로 주어집니다. input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다.
      ex) 인자 : "1+1i", "1+1i", return: "0+2i"

  1. 문제 해결 방법 구상

    1) 모든 인자가 (a+bi), (c+di) 라고 할때 모든 결과 값은 ac+adi+cbi+bdi^2 형태로 나옵니다. i^2 는 -1 이고 리턴값은 string 이므로 이런 형태가 됩니다. ac + (ad+cb)i + -(bd)

    2) 모든 인자는 a + bi 형태이므로 + 를 기준으로 쪼개서 계산을 하기로 했습니다.


3. 코드 작성
function topK(nums, k) {

  let sortedObj = [];
  let result = [];
  let numObj = {};

  for (let i of nums) {					// 받은 인자를 가지고 숫자:갯수 로 구성된 객체 numObj를 생성
    numObj[i] ? (numObj[i] += 1) : (numObj[i] = 1);
  }

  for (let key in numObj) {				// 객체를 [숫자, 갯수] 를 값으로 하는 배열로 변환
    sortedObj.push([key, numObj[key]]);  
  }
  
  let a = sortedObj.sort(function (a, b) {
    return b[1] - a[1];  				// 배열을 객수기준 내림차순으로 정렬
  });
  
  for (let i of a) {
    result.push(i[0]);					// 정렬된 배열의 0번 index 값(=숫자) 만 배열로 변환
  }
  
  return result.slice(0, k).map((i) => i * 1); 		// 변환한 배열의 앞에서부터 k 개만큼 잘라내고 숫자형으로 변환하여 리턴
}

  1. 작성 후 느낀점

    1) 문제 해결을 위해 배열 <-> 객체 전환이 꽤 잦은데 이럴 때 원하는 값을 뽑아내는 것이나, 정렬하는 것 등 데이터를 가공하는 방법에 대해 좀 더 알아봐야 할 것 같다

0개의 댓글