728x90
문제 ( 슬렉 node.js_7기 질문방에 댓글 스레드로 제출)
Q1 문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램을 작성하세요.
예를 들어, 문자열 'spartan'이 주어지면, 결과는 다음과 같아야 합니다: { s: 1, p: 1, a: 2, r: 1, t: 1, n: 1 }"
풀이
/*Q. 문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램을 작성하세요.
예를 들어, 문자열 'spartan'이 주어지면, 결과는 다음과 같아야 합니다: { s: 1, p: 1, a: 2, r: 1, t: 1, n: 1 }”*/
/**
* 1. 알파벳 으로 돌리기
* 2. 주어진 문자로 돌리기
* 개수 조합해서 저장( 객체로 만들기)
*/
function countStr(strs) {
str = str.toUpprCase()
let alpabets = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z];
// 객체 만들기
for (let alpabet of alpabets){
let anser
for(let str of strs ){
let $[alpabet];
if(alpabet=str){
$[alpabet] +=1
}
} // 객체에 알파벳:카운트로 추가
}
// 객체 반환
}
console.log(countStr(sparta))
수정 포인트
function countStr(strs) {
// 1. `str` 변수의 선언이 누락되었습니다. 함수 매개변수로는 `strs`가 사용되고 있으므로,
// `str`을 새로 선언하거나 `strs`를 사용해야 합니다.
str = str.toUpperCase(); // 오타: `toUpprCase()`가 아닌 `toUpperCase()`로 수정해야 합니다.
// 2. `alpabets` 배열에서 각 문자는 따옴표로 감싸져야 합니다. 현재는 변수로 인식되기 때문에 오류가 발생합니다.
let alphabets = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
// 3. 결과를 저장할 객체를 함수 시작 부분에서 생성해야 합니다.
const answer = {};
// 4. 변수 `alphabet`에서 오타가 있습니다. `alpabet`이 아닌 `alphabet`이어야 합니다.
for (let alphabet of alphabets) {
// 5. `let anser`는 불필요한 선언입니다. 대신 객체에 값을 추가해야 합니다.
// `answer[alphabet] = 0;`으로 초기화하는 것이 좋습니다.
answer[alphabet] = 0;
// 6. `strs` 배열의 각 문자를 반복해야 합니다.
for (let char of strs) {
// 7. `$[alphabet]`는 잘못된 문법입니다. `answer[alphabet]`로 수정해야 합니다.
// 객체의 특정 키에 접근할 때는 대괄호 표기법(`answer[alphabet]`)을 사용합니다.
if (alphabet === char) {
answer[alphabet] += 1; // 문자가 일치할 때 카운트 증가
}
} // 객체에 알파벳:카운트로 추가
}
return answer; // 객체 반환
}
// 8. `sparta`는 정의되지 않은 변수로 인식됩니다. 문자열로 전달하기 위해 `"sparta"`로 수정해야 합니다.
console.log(countStr("sparta"));
내 답
function countCharacters(str) {
const charCount = {}; // 각 문자의 등장 횟수를 저장할 객체 생성
for (let char of str) { // 문자열의 각 문자에 대해 반복
if (charCount[char]) { // 이미 등장한 경우
charCount[char] += 1; // 카운트 증가
} else {
charCount[char] = 1; // 처음 등장한 경우 카운트 1로 설정
}
}
return charCount; // 문자별 등장 횟수가 담긴 객체 반환
}
// 테스트
console.log(countCharacters("spartan"));
// 예상 출력: { s: 1, p: 1, a: 2, r: 1, t: 1, n: 1 }
강의
더보기
힌트
function countCharacters(str) {
// 여기를 채우면 됩니다!
return ... // 잘은 모르겠으나 str의 문자 개수를 센 무언가를 리턴해야 함!
}
/////////////////////////
let charCount = {}; // 오옷. 처음 보는 분들이 계시겠죠?
////////////////////////
for (let i = 0; i < str.length; i++) {
const char = str[i];
// char의 값을 기반으로 카운팅을 해야죠!
}
////////////////////////
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (charCount[char]) {
charCount[char]++;
} else {
charCount[char] = 1;
}
}
///////////////////////
모범답
function countCharacters(str) {
let charCount = {};
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (charCount[char]) {
charCount[char]++;
} else {
charCount[char] = 1;
}
}
return charCount;
}
Q2 연습 문제. 주어진 단어의 각 문자를 하나씩 뒤로 이동하여 만들어진 모든 회전된 단어를 출력하세요.
예를 들어, 입력을 "abc"로 받으면 출력은 ["abc", "bca", "cab"]로 출력하면 됩니다.
내답
function rotate(strs) {
let rot = []; // 회전된 문자열들을 저장할 배열
for (let i = 0; i < strs.length; i++) {
let str1 = strs.substring(0, i); // 앞 부분
let str2 = strs.substring(i); // 뒷 부분
rot.push(str2 + str1); // 회전된 문자열을 배열에 추가
}
return rot;
}
console.log(rotate("abc"));
강의
더보기
문장 자르기는 slice
// 코드로 옮기기 위해선 패턴을 분석해보겠죠. abc → bca로 만들려면 a만 끝쪽에 옮기면 되니까요. 이걸 하기 위해선 문자열을 슬라이싱 할 줄 알아야 합니다.
// 그러면, bc + a 느낌으로 조합을 하면 자연스럽겠죠. bc는 [1, 2]고 a는 [0]이니 slice로 표현하면 이렇게 될 수 있습니다.
word.slice(1) + word[0] // "bc" + "a"
slice(x) + slice(0,x)
모범답
function rotateWord(word) {
let rotations = [];
for (let i = 0; i < word.length; i++) {
let rotated = word.slice(i) + word.slice(0, i);
rotations.push(rotated);
}
return rotations;
}
console.log(rotateWord("abc")); // ["abc", "bca", "cab"]
'내일배움 강의 > 특강' 카테고리의 다른 글
[Node 7기] 현명하게 AWS 요금을 절약해봐요 (1) | 2024.11.20 |
---|---|
[Node 7기] 알고리즘 강의 - 4일차 링크드 리스트 기반 자료구조 형태 (1) | 2024.11.19 |
[Node 7기] 알고리즘 강의 - 3일차 시간복잡도, 공간 복잡도, 링크드리스 (0) | 2024.11.19 |
[Node 7기] 알고리즘 강의 - 1일차 (2) | 2024.11.07 |