JS 알고리즘 문제 풀이

김윤철·2022년 7월 15일
1

https://school.programmers.co.kr/
프로그래머스라는 곳에서 예제 풀이를 했습니다.

문제1)

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한 조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

풀이)

처음엔 제한 조건도 내가 만들어야 하는 줄 알고 엄청난 뻘짓을 했습니다. ㅋㅋㅋㅋ
a = Math.floor(Math.random()*20000001)-10000000 을 만들고
if 문으로 a>b 인 경우와 b<a인 경우도 만들고 난리도 아니었습니다.
하... 그러다가 항해 99 매니저님이 프로그래머스에 대해 설명해주시고 나서 정신차리고 다시 문제를 풀었습니다.

가우스의 등차수열을 참고하면 1~100까지의 수는 101이 50개와 있는것과 마찬가지임 (1+100)+(2+99)+(3+98)+...+(50+51)

function solution(a, b) {
var answer = 0;
return (a+b)*(((Math.abs(a-b))+1)/2)
}


문제2)

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.

풀이)

엄청난 고뇌의 시간이었습니다.....

고뇌의 흔적..

.length 와 substr()로 뒷 4자리와 앞의 숫자를 구분해내는데 성공!!
그 이후, reapeat()을 이용하여 앞의 숫자 length 만큼 * 로 만들고, 뒷자리를 붙혀서 만들어냈습니다.
그런데 string으로 반환해야 정답처리가 되는지 백틱까지 써가며 콘솔을 찍었는데..
이상하게 프로그래머스 홈페이지에서는 정답 밑에 undefined가 뜹니다..
이유를 몰라 VS code에 옮겨서 실험해봤는데, VS에서는 잘 작동되는 모습..

undefined 가 왜 나와? .. 몰?루

VS Code에서는 잘 작동되는 모습.

그래서 혹시 백틱의 문제인가 싶어서 한번 프로그래머스에서 백틱으로 실험을 해봤습니다.

백틱의 문제가 맞았군....
그래도 어느정도 틀을 잡아놔서 백틱을 안쓰는 쪽으로 변경.

오히려 백틱을 못쓴다는 제한이 걸리니 더 쉽게 풀이가 되는 경험을 했습니다.
(아마 이 문제를 풀면서 온갖 메소드를 연습해서 잘보였을지도..)

var answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return answer;

// 번호length의-4까지 "*"처리 + 번호의 뒷 4자리
// slice(음수)는 뒤에서 시작한다고 보면 된다.

정답 제출하고 다른분 걸 봤는데

엥? 정규식? 그게 뭐야? 몰?루
다음에 한번 알아봐야겠다는 다짐만 한 채..

1주차 팀 프로젝트와는 또 다른 고통을 느끼며.. 하루를 마무리했습니다.
그래도 점점 눈에 익는 것 같아 행복하다 :)

profile
코린이(코인아님)

0개의 댓글