[Code Kata] Week 2 - Day 2
문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
nums 배열의 길이는 무조건 2개 이상
Code
My Code
- 객체를 이용해서 배열 안에 들어있는 값들을 하나의 키로 정하고 value로 그 값들이 몇 개가 들어있는지 저장한다면 풀 수 있을 것 같았다.
function moreThanHalf(nums) {
if (nums.length >= 2) {
const major = {}
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
return major
} else {
return 0;
}
}
- 객체에 배열에 들어있는 키를 넣어주는 것은 쉬웠지만 value를 어떻게 처리할지에 대해 생각하느라 시간이 오래 걸렸다.
major[el] = (major[el])? (major[el]+1) : 0;
처음에는 이런 식으로 풀었는데 이렇게 한다면 계속 0이 나오기 때문에 true일 때의 식이 평생 실행되지 않게된다.
- 어차피 키가 들어왔다는 것은 최소한 값을 하나는 가지고 있다는 것이기 때문에 주어진 조건식이 false일 때 1이 값으로 저장되도록 한다면 인자로 받은 nums에서 숫자를 만날때마다 1씩 더하여 총 몇 개가 나왔는지 알 수 있게 된다.
- 원래는 과반수가 넘은 숫자를 반환하는 것이기 때문에 객체 major를 출력하면 안된다.
- 중간에 객체 안에 넣을 값을 해결했다는 것에 너무 기뻐서 열음님과 코드에 대한 이야기를 나누어 본 다음에 코드를 추가하였다.
function moreThanHalf(nums) {
if (nums.length >= 2) {
const major = {}
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
const keys = Object.keys(major);
const values = Object.values(major);
const maxValues = Math.max(...values);
for (let i in keys) {
if (major[keys[i]] === maxValues) {
return keys[i];
}
}
}else{
return 0;
}
}
- 과반수가 넘은 숫자를 반환하기 위해서 객체 major의 키와 value값을 배열로 만들어서 변수에 저장하였다.
- 반복문으로 major에 저장된 키 값과 values에 저장된 값들 중에서 최댓값을 구하여 키 값과 최댓값이 같다면 해당 키를 출력한다.
추가로 알게 된 사실
숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
nums 배열의 길이는 무조건 2개 이상
My Code
- 객체를 이용해서 배열 안에 들어있는 값들을 하나의 키로 정하고 value로 그 값들이 몇 개가 들어있는지 저장한다면 풀 수 있을 것 같았다.
function moreThanHalf(nums) {
if (nums.length >= 2) {
const major = {}
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
return major
} else {
return 0;
}
}
- 객체에 배열에 들어있는 키를 넣어주는 것은 쉬웠지만 value를 어떻게 처리할지에 대해 생각하느라 시간이 오래 걸렸다.
major[el] = (major[el])? (major[el]+1) : 0;
처음에는 이런 식으로 풀었는데 이렇게 한다면 계속 0이 나오기 때문에 true일 때의 식이 평생 실행되지 않게된다.- 어차피 키가 들어왔다는 것은 최소한 값을 하나는 가지고 있다는 것이기 때문에 주어진 조건식이 false일 때 1이 값으로 저장되도록 한다면 인자로 받은 nums에서 숫자를 만날때마다 1씩 더하여 총 몇 개가 나왔는지 알 수 있게 된다.
- 원래는 과반수가 넘은 숫자를 반환하는 것이기 때문에 객체 major를 출력하면 안된다.
- 중간에 객체 안에 넣을 값을 해결했다는 것에 너무 기뻐서 열음님과 코드에 대한 이야기를 나누어 본 다음에 코드를 추가하였다.
function moreThanHalf(nums) {
if (nums.length >= 2) {
const major = {}
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
const keys = Object.keys(major);
const values = Object.values(major);
const maxValues = Math.max(...values);
for (let i in keys) {
if (major[keys[i]] === maxValues) {
return keys[i];
}
}
}else{
return 0;
}
}
- 과반수가 넘은 숫자를 반환하기 위해서 객체 major의 키와 value값을 배열로 만들어서 변수에 저장하였다.
- 반복문으로 major에 저장된 키 값과 values에 저장된 값들 중에서 최댓값을 구하여 키 값과 최댓값이 같다면 해당 키를 출력한다.
추가로 알게 된 사실
코드 리뷰로 추가로 알게 된 사실이 있다.
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
나는 위와 같이 이렇게 삼항 연산자를 사용하여 value 값을 결정하였는데 이것을 더 간단하게도 표현할 수 있다.
nums.filter((el, index) => {
major[el] = (major[el] || 0) + 1;
});
이 식도 내가 처음에 작성한 코드와 똑같이 동작된다.
major[el] 값이 없다면 0으로 시작하여 같은 값을 만나면 +1씩 증가시킨다.
Author And Source
이 문제에 관하여([Code Kata] Week 2 - Day 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@silviaoh/Code-Kata-Week-2-Day-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)