Lsiron
코딩테스트 4(reduce, filter, repeat, slice) 본문
문제 1. 없는 숫자 더하기.
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
풀이=해답.
=> 빈 배열 arr을 선언 해 준뒤, 0부터 9까지의 반복문을 통해, i 요소가 없다면 arr에 추가를 하여, reduce() 함수로 더해주었다.
// 다른 풀이를 보니 0부터 9까지 더한 값 45에, numbers 배열을 reduce()함수를 통해 더한값을 빼주는 방식으로 푸는 방법도 있었다. 발상의 전환도 필요한 듯 하다.
문제 2. 나누어 떨어지는 숫자배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
풀이 = 해답.
=> filter() 함수를 이용하여, 나누어 떨어지는 요소만 남기도록 한 뒤, sort() 함수를 통해 오름차순으로 바꿔주었다. 이 후, result 배열의 length가 0이라는 것은 요소가 하나도 없다는 의미 이므로, 삼항연산자를 통해 -1을 추출할 수 있도록 했다.
// filter 말고도 map 그리고 for 반복문을 통해 배열은 추출할 수 있었다. 여기서 핵심은 배열에 아무 요소도 없을 경우, -1을 어떻게 반환하냐는 것 이었다.
문제 3. 핸드폰 번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
풀이.
해답.
=> 먼저 substr() 함수를 통해 뒷 네자리부터 추출했다. 그리곤 for 반복문을 통해 나머지 자리를 추출하여 *을 sum 변수에 삽입하였다. 이 후, sum + aft 를 통해 두 변수를 합쳐주었다.
// repeat() 함수의 존재와 slice()함수가 음수도 지원한다는 사실을 까맣게 잊고있었다.. 내장함수가 떠오르지 않다보니 1차원적으로 생각하게 되었고 결국엔 복잡한 코드를 만들어내고 말았다. 또한 substr은 현대에서 잘 쓰지 않고 substring과 slice를 자주 쓰는데 특히 slice를 쓴다고 한다. 잘 참조하도록 하자!
하루 총평.
점점 써야하는 내장함수의 종류가 늘어나는 것 같다. 또한 난이도가 점점 높아짐을 어느정도 체감 하고있다.
머릿속으로 그리는 연습을 더 많이 해야할 것 같다. 문제를 풀다가 막힌다 싶으면 손이 먼저 나가는 버릇이 다시 생기는 듯 하다. 막히면 처음으로 다시 돌아가는게 최선인 듯 하다.