juni
Study_240522 ( 알고리즘 ) 본문
// 문자열에서 가장 많이 등장한 문자 찾기
// 문제 정의:
// 주어진 문자열에서 가장 많이 등장하는 문자를 반환하라. 만약 여러 개라면 그 중 아무거나 반환하라.
// 조건:
// 대소문자를 구분한다.
// 공백도 하나의 문자로 간주한다.
// 예시:
// 입력: "banana"
// 출력: 'a' (혹은 'n')
function mostFrequentChar(s) {
// 문자와 갯수를 키:값 으로 저장하기위해 빈 객체 선언
const count = {};
// 가장 큰 값을 저장 할 숫자형 변수 선언
let maxCount = 0;
// 가장 큰 값의 키를 저장 할 문자형 변수 선언
let mostChar = "";
// 입력 받은 문자열의 문자를 활용하기위해 순회
for (let i = 0; i < s.length; i++) {
// 전달 받은 문자열을 순회하면서 객체 프로퍼티 확인
if (count[s[i]]) {
// 같은 아스키코드일 경우 키 값 증가
count[s[i]]++;
} else {
// 처음 등장한 아스키코드일 경우 객체에 저장 후 프로퍼티에 값 1 할당
count[s[i]] = 1;
}
// 객체 속성 값 중 최대값 탐색 -> 최대값의 키 값 할당
if (count[s[i]] >= maxCount) {
maxCount = count[s[i]];
mostChar = s[i];
}
}
return mostChar;
}
// 테스트 코드
function testMostFrequentChar() {
const testCases = [
{ input: "banana", expected: ["a", "n"] },
{ input: "apple", expected: ["p"] },
{ input: "mississippi", expected: ["i", "s"] },
{ input: "aabbcc", expected: ["a", "b", "c"] },
];
testCases.forEach(({ input, expected }, index) => {
try {
const result = mostFrequentChar(input);
if (!expected.includes(result))
throw new Error(`Expected one of ${expected}, but got ${result}`);
console.log(`Test ${index + 1}: Passed`);
} catch (error) {
console.log(`Test ${index + 1}: Failed - ${error.message}`);
}
});
}
// 테스트 함수 호출 : 터미널에 node practice2-1.js 실행
testMostFrequentChar();
// 두 문자열의 교집합 문자 집합 구하기
// 문제 정의:
// 두 문자열이 주어졌을 때, 두 문자열에 모두 등장하는 문자를 집합으로 반환하라.
// 조건:
// 대소문자를 구분하지 않는다.
// 결과는 집합(Set) 형태로 반환한다.
// 예시:
// 입력: "apple", "pineapple"
// 출력: new Set(['p', 'l', 'e'])
function commonCharacters(Character1, Character2) {
// 결과를 집합 형태로 반환하기 위한 빈 배열 선언
const arr = [];
// 전달 받은 문자열의 대소문자를 구분하지 않기위해 소문자로 통일
const lowerCharacter1 = Character1.toLowerCase();
const lowerCharacter2 = Character2.toLowerCase();
// 매개변수끼리 비교하기 위해 매개변수 중 아무거나 하나를 순회
for (let i = 0; i < Character1.length; i++) {
// 순회하면서 다른 매개변수에 같은 값이 있다면 빈 배열에 추가
if (lowerCharacter2.includes(lowerCharacter1[i])) {
arr.push(lowerCharacter1[i]);
}
}
// 결과 배열 내 중복된 값을 지우기 위해 JS 내장 객체 Set 사용
// 객체를 생성하기 위해 생성자 함수 new Set() 생성
return new Set(arr);
}
// 테스트 코드
function testCommonCharacters() {
const testCases = [
{ input: ["apple", "pineapple"], expected: new Set(["a", "p", "l", "e"]) },
{ input: ["hello", "world"], expected: new Set(["o", "l"]) },
{ input: ["abc", "def"], expected: new Set() },
{
input: ["abcdef", "fedcba"],
expected: new Set(["a", "b", "c", "d", "e", "f"]),
},
];
testCases.forEach(({ input, expected }, index) => {
try {
const result = new Set(commonCharacters(input[0], input[1]));
const isEqual =
expected.size === result.size &&
[...expected].every((value) => result.has(value));
if (!isEqual)
throw new Error(`Expected ${[...expected]}, but got ${[...result]}`);
console.log(`Test ${index + 1}: Passed`);
} catch (error) {
console.log(`Test ${index + 1}: Failed - ${error.message}`);
}
});
}
// 테스트 함수 호출 터미널에 node practice2-2.js 실행
testCommonCharacters();