1) 문자 개수 세기
문제 설명 :
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
문자 개수 세기는 도저히 알고리즘 자체가 생각나지 않아서 🤯
손도 못 대고 다른 사람의 풀이를 봤다. (스탬프 괜히 받고 싶었는데 잘 가...)
그냥 단순하게 알파벳 대소문자를 쭉 나열해서 문자열을 만들고 반복문을 돌려서 인덱스로 찾는 방식이었다니.....😞
그런 단순 노동일 리가 없잖아! 분명 간단한 방법이 있을 거야! 라고 나약하게 생각했던 스스로를 반성하는 계기가 되었다.
정말로 간단한 방법이 존재하지만 내가 모르는 상황이더라도,
모른다면 노가다를 해서라도 답을 찾아내려고 노력하자! 쉽게 가려고 하지 말자! 💪
(다른 문제 풀다가 돌아와서) 스스로 다시 짜본 풀이 :
function solution(my_string) {
const al = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
let answer = Array(52).fill(0);
for (let i = 0; i < my_string.length; i++) {
answer[al.indexOf(my_string[i])]++;
}
return answer;
}
2) 배열 만들기 4
문제 설명 :
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
- 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
문제 해결의 방향은 간단했다. 문제 설명대로 로직을 짜면 되니까.
그런데 처음에는 왜인지 아무리 돌려도 [1]만 나와서 한참이나 머리를 싸맸다.
평소에는 한 번도 이런 적이 없었는데!!! 😂
문제 설명 읽고 방심해서 입출력 예시를 건너뛰고 풀기 시작했던 게 문제였다.
i의 증가 조건을 고려하지 않고 무작정 반복문을 돌려버린 것.
그래서 i를 1 더하는 조건에 i++를 추가했다.
근데 나는 for문을 쓰고 있는데...? 기본 i++ 표현식이 없어도 동작하나...?🤔
일단 해봤다.
어? 테스트를 통과했다.
오오오~~ 없어도 되는구나~~ 하면서 채점하기를 눌렀는데 전 문제 통과 실패ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
테스트 케이스만 운 좋게 성공한 거였나보다...본 채점 문제는 볼 수 없다는 게 항상 아쉽다.
구글을 참고했더니 조건을 통해 증가시키는 방법 대신
반대로 조건문에 --를 넣어 for 반복의 자동 증가를 막는 방법이 있다는 걸 알게 됐다.
그렇게 해서 나온 풀이 :
function solution(arr) {
var stk = [];
for (let i = 0; i < arr.length; i++) {
if (!stk.length) {
stk.push(arr[i]);
} else if (stk[stk.length - 1] < arr[i]) {
stk.push(arr[i]);
} else {
stk.pop();
i--;
}
}
return stk;
}
'코딩테스트 > 프로그래머스 기초 트레이닝' 카테고리의 다른 글
[Javascript] 두 수의 합 (0) | 2023.07.13 |
---|---|
[Javascript] 조건에 맞게 수열 변환하기 2 (0) | 2023.07.08 |
[Javascript] 1로 만들기 (+답변 추가) (0) | 2023.06.28 |
[Javascript] 세로 읽기 (0) | 2023.06.27 |
[Javascript] 수열과 구간 쿼리 3 (0) | 2023.06.27 |
[Javascript] 날짜 비교하기 (0) | 2023.06.23 |
[Javascript] 특이한 이차원 배열 1 (0) | 2023.06.13 |
[Javascript] 특이한 이차원 배열 2 - every() (0) | 2023.06.13 |