https://school.programmers.co.kr/learn/courses/30/lessons/12915
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
위 알고리즘 문제 풀다가 오류난 것 정리.
위 문제에 접근 순서를
1. 입력받은 문자열들을 for 문 돌면서 가져오고 + 해당 문자열의 n번째 인덱스 문자를 젤 앞으로 붙히기
2. for 문을 나온 배열들을 사전순 정렬
3. for 문을 돌면서 1번에서 진행했던, 문자열마다 젤 앞에 추가했던 n번째 인덱스 문자를 제거하기
로 정했다.
function solution(strings, n) {
for (let i = 0; i < strings.length; i++) {
//"sun" 가져오기 + 문자열에 n번째 문자 젤 앞으로 붙히기
strings[i] = strings[i][n] + strings[i];
}
}
solution(["sun", "bed", "car"], 1);
문자열로 구성된 배열에서 각 요소의 n번째 인덱스 문자로 접근을 어떻게 해야할지 고민을 많이 했는데
저렇게 2차원 배열로 접근할 수 있었다.
사전 순 정렬은 sort() 매소드를 통해 문제없이 해결했는데
문제는 3번이였다.
let result=[];
for (let i = 0; i < str.length; i++) {
// for문을 돌면서 str 각 요소마다 shift 메서드로 문자열의 맨 앞 문자를 날려버리고
str[i].shift();
// result 배열에 넣어버리기
result.push(str[i]);
}
console.log(result);
// TypeError: str[i].shift is not a function
위와 같이 코드를 작성했는데 에러메시지가 위처럼 떳다
그래서 shift메서드에 관한 mdn 페이지를 확인해보니 "shift 메서드는 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환합니다" 라고 적혀있었다. shift로 접근한 요소가 배열이 아닌 문자열이여서 타입에러가 뜬 것 같다.
result = []; //새로운 빈 배열 만들어주고
for (let i = 0; i < strings.length; i++) {
let strings_arr = [...strings[i]]; //문자열 -> 배열
strings_arr.shift(); //배열 젤 앞 문자 날리기
strings_arr = strings_arr.join(""); //배열 -> 문자열
result.push(strings_arr);
}
console.log(result);
}
shift 메서드로 문자열의 젤 앞 문자를 날릴 수 있게, 문자열을 배열로 만들어 주어야 했다.
위처럼 스프레드 연산자로 문자열을 하나하나 풀어 배열로 만들어 주었는데 스프레드 연산자 말고도 Array.from()를 사용해도 되었다.
배열로 만들었으니 문제없이 split() 로 젤 앞 요소 날려주고 다시 문자열로 변환시켜야 했는데
이는 구글링해보니 join 메서드로 가능했다. join() 함수는 배열의 모든 값들을 연결한 문자열을 리턴하고, 이때 각각의 값들 사이에는 파라미터로 입력된 구분자를 넣어줘야 했는데 나는 join("") 이렇게 빈공백 구분자를 넣어주어서 배열 요소 사이를 구분하는 , 를 없애주었다.
나중에 문법이 익숙어지면 별 거 아닌 문제였겠지만 이거 오류 원인 찾는다구.. 몇시간을 썻는지 😅
'TIL' 카테고리의 다른 글
| 5월 31일 TIL - 최소공배수 = 두 수의 곱 / 최대공약수 (0) | 2023.05.31 |
|---|---|
| 5월 30일 TIL - (개인프로젝트) api로 받아온 정보를 html에 넣기 (0) | 2023.05.30 |
| 5월 26일 TIL - reduce() (0) | 2023.05.26 |
| 5월 24일 TIL (0) | 2023.05.25 |
| 5월 23일 TIL (0) | 2023.05.24 |