문제 1
주어진 문자열에서 중복된 문자를 제거하고, 남은 문자들을 원래 순서대로 반환하는 함수를 작성하세요.
제한사항:
- 문자열의 길이는 1 이상 1000 이하입니다.
function solution (str){
const result = [];
for(let i=0; i<str.length; i++){
if(!result.includes(str[i]))
result.push(str[i]);
}
return result.join('');
}
console.log(solution('abca')); // abc
문제 2
주어진 배열에서 최솟값과 최댓값을 찾고, [최솟값, 최댓값] 형태의 배열을 반환하는 함수를 작성하세요.
제한사항:
- 배열의 길이는 1 이상 1000 이하입니다.
- 배열의 원소는 -1000 이상 1000 이하의 정수입니다.
function solution (arr){
let max = arr[0];
let min = arr[0];
for (let i=0; i<arr.length; i++){
if (arr[i] > max)
max = arr[i];
}
for (let i=0; i<arr.length; i++){
if (arr[i] < min)
min = arr[i];
}
return [min, max];
}
console.log(solution([14,24,56,7,51,63,42])); // [ 7, 63 ]
문제 3
주어진 문자열을 요약하는 함수를 작성해주세요!
function solution(str) {
let obj = {};
let answer = '';
for (let i = 0; i < str.length; i++) {
if (!obj[str[i]])
obj[str[i]] = 1;
else
obj[str[i]]++;
}
for (const [alpahbet, count] of Object.entries(obj)) {
answer += `${alpahbet}${count}/`;
}
return answer.slice(0, -1);
}
console.log(solution('ahhhhz')); // a1/h4/z1
문제 4
주어진 배열에서 두 수를 선택하여 그 합이 주어진 target 값과 일치하는지 확인하는 함수를 작성하세요. 일치하는 경우 true, 그렇지 않은 경우 false를 반환하세요.
제한사항:
- 배열의 길이는 2 이상 1000 이하입니다.
- 배열의 원소는 1 이상 1000 이하의 자연수입니다.
function solution(arr, target){
let result = false;
for(let i=0; i<arr.length-1; i++){
for(let j=i+1; j<arr.length; j++){
if(Number(arr[i]) + Number(arr[j]) === target)
result = true;
}
}
return result;
}
console.log(solution([2,7,11,15], 9)); // true
console.log(solution([2,7,11,15], 13)); // true
console.log(solution([2,7,11,15], 6)); // false
console.log(solution([2,7,11,15], 26)); // true
문제 5
주어진 문자열이 유효한 괄호 조합인지 확인하는 함수를 작성하세요. 유효한 조합은 모든 여는 괄호가 올바르게 닫혀야 하며, 괄호의 순서도 일치해야 합니다.
제한사항:
- 문자열의 길이는 1 이상 1000 이하입니다.
- 괄호는 (), {}, []의 세 종류입니다.
예시:
({[]}) // 출력: true
({][}) // 출력: false
function solution(str) {
let stack = [];
let result = true;
for (let i = 0; i < str.length; i++) {
if (str[i] === '(') { // 소괄호 열 차례인데
if (stack.length !== 0) { // 스택이 차있으면
result = false; // false
console.log('( 가 제일 바깥쪽에 위치해야 합니다.');
break;
} else {
stack.push(str[i]);
console.log('소괄호 열림');
continue;
}
} else if (str[i] === '{') { // 중괄호 열 차례인데
if (stack[stack.length - 1] === '[') { // 대괄호가 이미 열려있으면
result = false; // false
console.log('[ 안에 { 가 있으면 안됩니다.');
break;
} else {
stack.push(str[i]);
console.log('중괄호 열림');
continue;
}
} else if (str[i] === '[') { // 대괄호는 그냥 들어가기만 하면 됨
stack.push(str[i]);
console.log('대괄호 열림');
} else if (str[i] === ')') { // 소괄호 닫을 차례인데
if (stack[stack.length - 1] !== '(') { // 소괄호가 열려있지 않으면
result = false; // false
console.log('괄호가 제대로 닫히지 않았습니다.');
break;
} else if (stack[stack.length - 1] === '(') { // 소괄호가 열려있으면
stack.pop(); // 스택 제일 위에서 꺼냄
console.log('소괄호 닫힘');
continue;
}
} else if (str[i] === '}') { // 중괄호 닫을 차례인데
if (stack[stack.length - 1] !== '{') { // 중괄호가 열려있지 않으면
result = false; // false
console.log('괄호가 제대로 닫히지 않았습니다.');
break;
} else if (stack[stack.length - 1] === '{') { // 중괄호가 열려있으면
stack.pop(); // 스택 제일 위에서 꺼냄
console.log('중괄호 닫힘');
continue;
}
} else if (str[i] === ']') { // 대괄호 닫을 차례인데
if (stack[stack.length - 1] !== '[') { // 대괄호가 열려있지 않으면
result = false; // false
console.log('괄호가 제대로 닫히지 않았습니다.');
break;
} else if (stack[stack.length - 1] === '[') { // 대괄호가 열려있으면
stack.pop(); // 스택 제일 위에서 꺼냄
console.log('대괄호 닫힘');
continue;
}
}
}
if (stack.length !== 0 && result === true) {
result = false;
console.log('열려있는 괄호가 있습니다.');
}
return result;
}
console.log(solution('())'));
'TIL' 카테고리의 다른 글
TIL 8/21 - 데일리 루틴 40번, 개인과제 (0) | 2024.08.21 |
---|---|
TIL 8/20 - 데일리 루틴 28번 ~ 39번 (0) | 2024.08.20 |
TIL 8/19 - 알고리즘 문제풀이 (0) | 2024.08.19 |
TIL 8/16 - JavaScript 문법 종합반 3주차 (0) | 2024.08.19 |
TIL 8/14 - JavaScript 문법 종합반 3주차 (0) | 2024.08.14 |