문제1 . 제일 작은 수 제거하기
- 문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
- 제한 조건
-arr은 길이 1 이상인 배열입니다.
-인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
function solution(arr) {arr.splice(arr.indexOf(Math.min(...arr)),1);arr.length === 0 ? answer = [-1] : answer = arrreturn answer}
처음엔 for문을 이용해서 엄청 길게 코드를 짰었는데, 코드 실행을 했을땐 문제가 없다가 제출할려고하니 실패라고 떠서 구글링한 결과 코드의 효율이 너무 안좋으면 실패라고 뜬다는걸 알았습니다.
그래서 전부 다 지우고 문법을 써가지고 풀어야겠다 싶었습니다.
가장작은 수를 제거한 배열을 리턴해야 하기 때문에
splice메서드의 첫번째 매게변수에는 배열에서 제거 또는 삽입을 시작할 인덱스입니다.
배열의 가장 작은 값을 indexOf를 이용해서 최솟값의 인덱스를 추출했습니다.(Math.min은 최소값을 찾아주는 메서드 ...arr을 사용해서 배열에서 가장 작은 값을 찾음)
그리고 두번째 매게변수 1은 첫번째 매게변수의 인덱스부터 몇개의 요소를 없앨껀지 이기 때문에 문제에서 최솟값을 제외한 배열을 리턴 하라고 했으므로, 1을 지정했습니다.
하지만 이러면 arr배열이 하나밖에없는, 예시처럼 [10]이라면 빈 배열이 반환되기때문에 -1이 반환이 안됩니다.
그러므로 위 splice가 끝난뒤 배열이 비어있다면 -1을 추가해주면 되므로
arr의 길이가 0이라면 answer가 [-1]을 리턴하면 되고, 0이 아니라면 answer가 arr를 리턴하면 되므로
삼항연산자를 사용헀습니다.
문제2. 가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한사항
s는 길이가 1 이상, 100이하인 스트링입니다
function solution(s) { let arr = [...s]; for(let i = 0 ; i < arr.length; i++){ let num = Math.floor(arr.length/2) if(arr.length%2 === 0){ return arr[num-1]+arr[num]; }else if(arr.length%2 !==0 ){ return arr[num]; } } }
전 코드테스트에서 배열의 중앙값을 구하는 문제가 있었습니다.
그 문제풀이를 응용해서 하면 되겠구나 싶었고
num에 arr.length의 중앙값을 정수부분만(5/2 = 2.5 지만 Math.floor를 사용해서 2만 출력)
그리고 if문을 사용해 arr.length 를 2로 나누었을때 나머지가 0이면 2개의 값을 더해서 리턴하게끔
나머지가 0이 아니라면 그 중앙값의 정수부분만 리턴하게끔 했습니다.
하지만 코드가 깔끔하지도않고, 너무 무거워보여서 다른사람의 풀이를 가지고 공부를 했습니다.
다른사람의 풀이.
function solution(s) {
return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}
substr메서드를 사용한방법인데,
substr메서드의 첫번째 매게변수는 추출을 시작할 부분이고 두번째 매게변수는 총 길이를 뜻한다.
그러므로 첫번째 매게변수부터 해석을 하자면
Math.ceil은 소숫점을 올림,반올림,버림이 있다면 올림에 속한다.(위에서 내가 문제 2를 풀때 사용한것은 floor 즉 버림이다)
즉 s의 길이가 5라면 3을 4라면 2를 나타낸다.
그럼 추출은 3번째 또는 2번째에서 시작을 할 것이고, 추출한 것의 길이는 삼항연산자를 써서
s.length / 2 의 나머지 값이 0 이라면 길이는 2 이고, 아니라면 1이다.
확실히 이 방법이 코드가 깔끔해보였고, substr 메서드를 잘 익혀야겠다고 생각했습니다.
'코딩테스트' 카테고리의 다른 글
| (javascript)문자열 내림차순으로 배치하기, 부족한 금액 계산하기, 문자열 다루기 기본 (0) | 2024.01.19 |
|---|---|
| (javascript)수박수박수박수?, 내적, 약수의 개수와 덧셈 (0) | 2024.01.18 |
| (javascript)음양더하기, 핸드폰 번호 가리기, 없는 숫자 더하기 (0) | 2024.01.16 |
| (javascript)콜라츠 추측, 서울에서 김서방 찾기, 나누어 떨어지는 숫자 (1) | 2024.01.15 |
| (javascript)정수 내림차순으로 배치하기, 하샤드 수, 두 정수 사이의 합 (1) | 2024.01.12 |