티스토리 뷰

내장 메서드에 sort가 있었기 때문에 MDN 문서를 읽어주고 풀이했다.
function solution(num_list) {
return num_list.sort((a, b) => a - b).slice(5);
}
가장 작은 5개의 수를 제외하기 위해 slice 메서드를 사용해주었다.
배열의 인덱스 5부터 끝까지 요소를 추출해주기 때문에, 그 나머지만 num_list에 남게 된다.
원본 배열이 바뀌는 성질을 이용하니 깔끔한 코드가 나왔다.

function solution(n_str) {
return parseInt(n_str, 10);
}
parseInt를 통해 문자열 인자를 파싱해줄 수 있다하여 사용했다.
두 번째 인자로 10을 넘겨주며, 10진수 정수로 변환할 수 있다.
근데 충격적인 코드가 있었으니...
const solution = Number
근데 이거 왜 되는걸까?
콘솔에 찍어보니까

이렇게 나오는데 하필 테스트코드가 전부 정수 문자열만 있었던걸까

이건 바로 조건문부터 생각났다.
function solution(angle) {
if (angle > 0 && angle < 90) {
return 1;
} else if (angle === 90) {
return 2;
} else if (angle > 90 && angle < 180) {
return 3;
} else if (angle === 180) {
return 4;
}
}
근데 입출력에 대한 문제도 아니고 너무 간단한데
과연 이게 가장 베스트일까?
삼항연산자를 중복하는 것은 너무 어거지같고,
이중배열에 저장해볼까도 생각했는데
별다른 해결책을 찾지 못해서 정답을 제출해보았다.
근데 마침 두 생각에 가까운 해답들이 있었는데
function solution(angle) {
return [0, 90, 91, 180].filter(x => angle>=x).length;
}
이건 진짜 쌈뽕한 문제 해결 같다.
lenth가 왜 붙어있냐면, angle이 배열의 기준점을 몇 개 넘었는지 세는 데 도움이 되기 때문이다.
이런 식으로 사용될 수 있구나.
또한, 삼항연산자도 중첩이 되는게 맞았다.
function solution(angle) {
return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}
이렇게 중첩할 수 있다는 것은 배웠으나,
코드가 정말 너무 길어지는게 아니라면 가독성은 좀 떨어지는 듯 싶다.

function solution(array) {
array.sort((a, b) => a - b);
const middleIndex = Math.floor(array.length / 2);
return array[middleIndex];
}
중앙값을 찾기 위해 floor를 이용했다.
홀수여도 적용되는 결과이니, 그걸 바로 return해주었다.
다른 사람의 코드도 이 코드를 리팩토링한정도였다.
function solution(array) {
return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}
근데 가독성이 좀 떨어지는 것도 같아서 그떄그때 상황 봐가며 사용하면 될 것 같다.

이 코드 헤맸는데 생각보다 정답률 높아서 놀랐다.
그래서 내 나이를 대입해 생각해보았는데, 그냥 기준 날짜에서 나이를 빼면 되는거였다...
이게 문제를 조그맣게 떼어서 생각한다는 사고를 장착하는게 쉽지 않은 것 같다.
function solution(age) {
const currentYear = 2022;
const birthYear = currentYear - age;
return birthYear;
}
근데 이게 안되길래 한참 봤다.
당연히 숫자인데 타입 문제도 아니고.
근데 조건 보니까 연나이 기준이라서...ㅎ
function solution(age) {
return (2022 - age + 1);
}
설마 이게 되나했더니 되더라고...
기준이 2022년이라 소용 없었지만, 현재를 기준으로 하는거라면
new Date()를 사용할 수도 있을 것 같다.
Date.prototype.getFullYear() - JavaScript | MDN
getFullYear() 메서드는 주어진 날짜의 현지 시간 기준 연도를 반환합니다.
developer.mozilla.org

처음에는 당연히 replace 연산자를 떠올렸다.
function solution(rny_string) {
return rny_string.replace("m", "rn");
}
근데...

이런 결과가 나와서 한참 서치해본 결과
정규표현식이란 것을 배웠다.
function solution(rny_string) {
return rny_string.replace(/m/g, "rn");
}
알고보니 이 경우는 첫번째 문자열만 바꿔주기 때문이었던거다.
만약 replaceAll 메서드를 사용했다면 통과했을 것이다.
정규식은, 문자열 내의 모든 일치 항목을 한 번에 대체할 수 있기 때문에 사용하는 것이다.
/g는 전역 검색을 의미한다.
정규 표현식 - JavaScript | MDN
정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다. String의 match(), matchA
developer.mozilla.org
이걸 외워서 쓰나 궁금해서 여쭤봤는데 현직 개발자 분들은
그때그때 보면서 사용한다고...ㅎ
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
이 사이트가 제일 유명한듯하다.

보자마자 삼항연산자가 생각났다.
그리고 앞서 배운 것처럼 삼항연산자 중첩을 시작했다...ㅎ
function solution(myString) {
return myString.split('').map(char =>
char === 'a' ? 'A' :
char === 'A' ? 'A' :
char >= 'A' && char <= 'Z' ? char.toLowerCase() : char
).join('');
}
근데 훨씬 깔끔한 코드가 있었다.
일단 모두 소문자로 바꾼 다음에, a만 A로 변환해주면 되는거니까
const solution=s=>s.toLowerCase().replaceAll('a','A');
완전 깔끔 그 자체인 코드다.

이건 그냥 i--해서 하나씩 배열 안에 push해주면 될 것 같다.
function solution(start_num, end_num) {
let answer = [];
for (let i = start_num; i >= end_num; i--) {
answer.push(i);
}
return answer;
}
다른 사람의 코드가 있긴 했는데, 내 기준에선 가독성이 좀 떨어지는 듯하다.
const solution = (start, end) => Array(start-end+1).fill(start).map((v,i)=>v-i);
배열을 생성한 다음에 모두 start로 채워준다.
그리고 map으로 배열을 돌면서 숫자를 하나씩 줄여주는 건데 조금 투머치한듯함!
'Oops, All Code! > 🤯 Oops, My Algorithm!' 카테고리의 다른 글
| - ̗̀ෆෆ ̖́ 05. 기본 입출력에 관한 예제 (0) | 2024.07.02 |
|---|---|
| CT Sprint: 프로그래머스(Programmers)와 리트코드(LeetCode)를 이용한 코딩테스트 (0) | 2024.07.01 |
| - ̗̀ෆෆ ̖́ 03. 기본 입출력에 관한 예제 (0) | 2024.06.30 |
| - ̗̀ෆෆ ̖́ 02. 기본 입출력에 관한 예제 (0) | 2024.06.29 |
| - ̗̀ෆෆ ̖́ 01. 기본 입출력에 관한 예제 (0) | 2024.06.28 |
- Total
- Today
- Yesterday
- 카드뉴스
- 소사벌맛집
- 트러블슈팅
- 서평
- 일급객체
- 도서리뷰
- js
- 프론트엔드
- 프로토타입
- 네이버부스트캠프
- typescript
- 경험플리마켓
- 카페추천
- 회고
- 도서추천
- 프리코스
- javascript
- 안성스타필드
- 어른의어휘공부
- 소사벌
- 웹풀스택
- 책추천
- 대학생플리마켓
- 어휘력
- 부스트캠프
- react
- 대학생팝업스토어
- 코딩테스트
- 우아한테크코스
- 비즈플리마켓
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |