문제

풀이 코드

function solution(arr, divisor) {
  let answer = arr.filter((item) => item % divisor === 0).sort((a, b) => a - b);
  return answer.length === 0 ? [-1] : answer;
}

 

풀이 과정

간단히 구현할 수 있었다.

filter를 이용해 나누어 떨어지는 요소들만 새로 배열을 생성하고, 해당 배열을 sort 함수를 통해 오름차순으로 정렬했다.

 

문제

 

풀이 코드

// 방법 1. 아스키 코드로 변환하여 계산
 function solution(strings, n) {
   return strings.sort().sort((a, b) => a.charCodeAt(n) - b.charCodeAt(n));
 }

// 방법 2. localeCompare 메서드 이용
function solution(strings, n) {
  return strings.sort((a, b) => {
    return a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n]);
  });
}

 

풀이 과정

두가지 방법으로 풀었다.

 

첫번째 방법은 우선 문자열 배열 자체를 오름차순 정렬을 수행하고,

곧바로 다시 sort 함수를 사용하는데, 여기서 문제에서 주어진 인덱스의 아스키 값( charCodeAt ) 을 비교하여 재 정렬 하도록 했다.

 

두번째 방법은 localeCompare 함수를 이용하여, 문자열 비교를 통해 정렬 하였다, 여기서 주어진 인덱스의 값이 같다면, 문자열 자체를 비교하여 판단하게 하였고, 같지 않다면, 해당 문자열의 인덱스 기준으로 비교하도록 하였다.

 

두가지 방법다 검색을 통해 해결 했지만, localCompare 함수는 정말 매력적이라고 느껴졌다.

문제

 

풀이 코드

function solution(a, b) {
  let min = a < b ? a : b;
  return [...Array(Math.abs(a - b) + 1).keys()]
    .map((item) => item + min)
    .reduce((sum, item) => sum + item, 0);
}

 

풀이 과정

범위의 값을 저장 하기위해 검색을 했다

keys() 함수를 쓰면, 0부터 차례대로 연속된 수를 저장할수 있다!

Array의 크기를 두수의 차이 + 1 만큼 지정해주고,

 

a 와 b 중 최솟값을 삼항연산자로 구한다음, map 과 reduce 를 이용해 수의 합을 구했다.

 

채점 통과가 되긴 했으나, 시간이 좀 오래걸렸다 아무래도 함수를 많이 사용하고 그래서 그런거같다

다른사람의 코드를 참고해야만 할거 같아서 제출하고 다른 풀이를 봤다

 

다른사람의 코드

function adder(a, b){
	return (a+b)*(Math.abs(b-a)+1)/2;
}

할말을 잃었다

 

두수의 합 * 두수 사이의 범위 크기 / 2

 

와;; 이거만 하면 배열을 생성할 일도 없고 그냥 바로 계산이 가능하다

갓갓

지난 토요일, 예전에 한달도 넘게 지난
어느날 그냥 신청했던 애플 개발자 아카데미 에서 시험응시 링크가 날아왔다.

iOS에 대한 미련을 그만두고, JS 공부를 하고 있었는데
시험만이라도 보자 라는 생각이 들었고 한시간 가량? 시험을 응시했다

그냥 논리력 / 프로그래밍 기초 개념 을 묻는 문제여서

와 이거 이력서랑 포트폴리오로 갈리겠구나 싶었다
나는 포폴이라곤 제대로된거 낸것도 아니고, 이력서도 20년 2월 대학 졸업
을 기점으로 쓴 내용도 없었다

당연히 떨어지겠다 생각하고 또다시 JS 공부를 하고 있었는데

오늘 공부를 위해 정보를 얻던 단톡방에서 애플 개발자 아카데미 합격자 발표날이라며 이야기가 나왔다

아 그거? 나는 떨어졌을껄 하며 신경도 안쓰고 있다가
혹시? 하는 마음에 메일함을 봤지만 메일이 안왔다

이 시간이 3시 20분쯤?

내가 또 뭐하나 신경쓰이면 다른일은 못하는 체질이라서
애플 아카데미 관련 단체톡방도 들어갔다 ㅋㅋㅋㅋㅋㅋ

들어가자마자 불합격이라는 말들이 오갔다 그것도 엄청많이;;

들어갈때 인원수가 600명 이상이였던거 같은데 글을쓰고 있는 지금 180명 가량 남아있다;;
테스트에서 많이 탈락한듯

무튼 메일 아직 안온사람들은 합격자일 확률이 크다며 설레발을 쳤다

근데 나는 왜 메일이 안오는가?
이력서도 볼품없고, 포폴도 한게 없는데 왜?

다른분들 물어보니 진짜 심혈을 기울려 작성하셨더라

이게 또 오기가 생기자너 ㅋㅋㅋㅋㅋㅋ

그래서 3시 20분부터 자그마치 6시가 넘도록 약 3시간동안 메일만 새로고침하고있었다;;;;

그리고나서 메일이 왔는데

??
???
????

내 눈을 의심했다
1차 합격이라고? 내가?
내심 기분이 좋았다

막상 이게 붙고나니까 또 iOS에 욕심이 생기기도 하고,,,
이왕 하는거 최선을 다해봐야겠다

붙고싶다 애플 자체 교육기관이라니!
iOS 개발자가 되고싶은 ( 싶었던 ) 나에게 꿈같은 기회라는 생각이 든다!

문제

 

풀이 코드

function solution(s) {
  let sLower = s.toLowerCase().split('');
  let pCount = sLower.filter((item) => item === 'p').length;
  let yCount = sLower.filter((item) => item === 'y').length;

  return pCount === yCount;
}

 

풀이 과정

우선, 문자열내의 모든 요소를 소문자로 변경해주고 해당 문자열을 배열로 만들었다. ( toLowerCase, split )

그리고 나서 filter 함수를 통해 p 와 y 만 저장한 배열을 각각 생성하고, 해당 배열의 길이를 각각의 변수에 저장했다.

 

그리고 그냥 같은지 비교한 값을 반환시켰다

 

이거 제출하고 나서 생각한건데 변수의 쓰임세와 상수의 쓰임세를 각각 구분해서 사용하면 좋을 것 같다.

해당 코드에서 변수는 사실 필요없다.

 

모두 const 로 상수정의 하는게 바람직함

 

다른사람의 코드

// 1 번
function numPY(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

// 2 번
function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}

1 번의 풀이처럼 한줄로 간단하게, 그리고 split 만으로 바로 구분해서 풀이할수가 있다. 이건 생각 못했다

 

2 번 풀이의 경우 댓글들을 보니 p 나 y 가 아예 없을경우, 오답이 발생한다고 나와있어서 정답은 아닌거 같지만 그럼에도 가져온 이유는

math 라는 함수를 처음보기 때문이다. math 라는 함수도 공부해 봐야 겠다

+ Recent posts