1. 2개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
numbers라는 배열에서 2개의 숫자를 뽑아서 더한 다음 모든 숫자를 중복없이 오름차순으로 담아 return하는 문제이다.
먼저 배열에서 2개씩 뽑아 서로 더하기 위해 이중 for문을 사용했고 그걸 sum이라는 배열안에다가 넣어주고 sort((a,b)+>a-b)로 오름차순으로 배치한다.
그리고 sum을 콘솔에 찍으면
[ 2, 3, 3, 4, 4, 5, 5, 5, 6, 7 ] |
이렇게 나온다. 중복된 값이 있는 것을 볼 수 있다. 중복된 값을 없애기 위해서는 2가지 방법이 있다.
첫 번째는 filter()함수를 이용해 조건에 맞는 값들만 새로 배열을 만들어주는 것이다.
16번 라인이 바로 filter로 중복을 없애는 방법이다. sum에 있는 배열의 값들을 돌면서 sum의 +1번째 있는 인덱스에 있는 값과 비교하면서 같지 않을 때만 unique라는 배열에 넣어준다. 그러면 중복된 값은 넣지 않기 때문에 중복을 없앨 수 있다.
하지만 여기서 궁금한 점이 하나 있었는데 그것은 바로 마지막 7이 어떻게 들어가냐 였다. 7다음은 비교할만한 요소가 없는데 말이다 그래서 콘솔로 찍어보았더니 3 3 4 4 5 5 6 7 undefined 라고 출력됐다.
즉 공간은 없지만 값이 없다는 말로 7이랑 같지 않으니 넣어주는 방식이다!!
두 번 째는 중복된 값을 알아서 없애주는 Set에 넣어주는 방법이 있다.
중복된 값이 있는 sum배열을 Set에 넣어주면 Set이 알아서 중복된 값들을 없애준다.
그리고 그걸 새로운 배열 answer에 넣어준다. 여기서 처음에 ...이 뭔지 몰랐는데 콘솔로 찍어보니 배열이나 set에 있는 [ ] 혹은 Set { }을 없고 오로지 요소의 값들만 비교할 수 있게 해주는 문법인 것 같다.
이렇게 set을 이용해서도 중복된 값을 없앨 수 있다.
2. 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
처음에 for문을 left에서 right만큼 돌면서 어떻게 약수의 개수가 짝인지 홀 수인지를 판별하나 고민하다가 따로 함수를 만든 분의 코드를 보고 힌트를 얻어 만들었다.
left에서 right만큼 돌면서 해당 숫자를 makeMeasure라는 함수로 보내고 1부터 해당 수 까지 나누면서 나누어 떨어질 때마다 cnt에다가 1씩 더해주었다. 그리고 그 i의 숫자가 2로 나누어 떨어지면 더해주고 아니라면 홀수이기 때문에 빼주었다.
여기서 처음에 4번에 있는 let cnt=0을 makeMeasure함수 밖인 전역변수로 선언해주었더니 값이 틀리게 나왔다. 하지만 지역변수로 선언하니 맞았다고 나왔다.
그래서 콘솔로 찍어보니 전역변수로 선언하니 값이 누적된다는 것을 알았다.
지역변수면 변수가 그 함수안에서만 사용되기 때문에 돌때마다 0으로 리셋이 되지만 전역이면 리셋되지 않고 누적되어 틀리다는 것을 알았다. 변수의 선언 위치도 항상 꼼꼼하게 생각해야 겠다.
3. 숫자 문자열과 영단어
이 문제는 어떻게 접근해야할지 감도 안잡해서 고민하다가 구글링을 하고 이해한 문제이다.
이 솔루션이 가장 인상적이고 자세히 배운게 많았다. 여기서 split( )의 구분자를 numbers배열의 요소로 주었는데 만약
one4seveneight가 들어온다면 one에 해당하는 구분자가 split로 들어오면 one이 기준이 되어 '' , 4seveneight로 구분된다.
이게 구분자로 구분되는 것을 보여준다.
one이 구분자가 되었기 때문에 ,이 되거 ' ' 과 4seveneight가 구분되고 그때 ,의 위치에 i숫자가 붙는다. 처음에는
join이 어떻게 저 위치에 붙는 지 이해가 되지 않았는데 join은 앞뒤 배열을 문자열로 붙여주는 함수이기 때문에 join( )안에 넣은 값을 , 로 구분되어 있는 위치에 들어가 합쳐준다. 따라서 현재 1이 , 위치에 들어가고 나머지 숫자도 반복적으로 되는 것을 볼 수 있다.
알고리즘 문제를 풀다 보니 split과 join을 많이 쓴다는 것을 알 수 있었는데 디테일하게 어떻게 사용되는 지를 알 수 있서 좋았다.
'항해' 카테고리의 다른 글
WebRTC에 대한 이해 (0) | 2022.06.09 |
---|---|
핸드폰 번호 하이픈형식으로 출력되는 문제 영상 (2) | 2022.03.17 |
알고리즘 2 (0) | 2022.03.14 |
알고리즘 문제 (0) | 2022.03.14 |
항해 1주차 회고록 (2) | 2022.03.13 |
댓글