행복을 담는 블로그
[TIL] 240104(목) 알고리즘 문제 풀기 / 문자열 내 마음대로 정렬하기 본문
오늘의 공부📖
- 09-11시 [특강] 알고리즘 세션 2일차
- JS 문법 2주차 강의 복습 + 정리하기
- JS 문법 3주차 강의 수강
- 개인 과제 진행
오늘 공부한 내용 정리💁🏻♀️
1. 복습한 내용
1) Map
📌 Map 이란?
- key-value pair를 저장
- 객체와 비슷. BUT 객체는 key에 문자 형태만 가능하다.
- Map은 key에 어떤 데이터 타입(유형)도 다 들어올 수 있다.
- Map은 key가 정렬된 순서로 저장된다.
- Map 생성
const myMap = new Map();
- set() method : Map에 값을 추가
myMap.set('key', 'value'); // {'key' => 'value'}
- get() method : Map에 값을 검색
console.log(myMap.get('key')); // 'value' 출력
- Map의 반복
: keys(), values(), entries() 메소드를 사용하여, key, value, key-value pair를 반복 할 수 있다.
const myMap = new Map();
myMap.set('one',1);
myMap.set('two',2);
myMap.set('three',3);
// keys()
for (const key of myMap.keys()) {
console.log(key);
}
// values()
for(const value of myMap.values()){
console.log(value);
}
// entries()
for (const entry of myMap.entries()){
console.log(entry);
}
- Map의 크기 및 존재 여부 확인
console.log(myMap.size); //map의 사이즈
console.log(myMap.has("two")); // key 기반 검색
2) Set
📌 Set 이란?
- 고유한 값을 저장하는 자료구조다.
- 값만 저장한다. - value (o)
- 키를 저장하지는 않는다. - key (x)
- 값이 중복되지 않는 유일한 요소로만 구성된다.
- Set 생성
const mySet = new Set();
- Set 사용
const mySet = new Set(); mySet.add('value1'); mySet.add("value2"); mySet.add("value2"); // 중복되는 값은 제거하고 출력
2. 새롭게 배운 내용
1) JS 문법 종합반 강의 2주차 연습문제
function solution(strings,n) {
var answer = [];
// 1. 문자열의 가장 앞 글자를 붙인 배열 만들기
for(var i=0; i<strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
// car -> a + car -> acar
}
// 2. 해당 배열을 사전순으로 정렬(sort)
strings.sort(); //자동으로 오름차순으로 정렬
// 3. 앞 글자 제거 후 리턴
for(var j=0; j<strings.length; j++){
strings[j]=strings[j].replace(strings[j][0], '');
answer.push(strings[j]);
}
console.log(answer);
return answer;
}
▶️ 알고리즘 문제를 풀 때 어떤 방식으로 풀어 나가야 하는지, 1,2,3 순서를 먼저 작성해 볼 것.
이후 각 순서에 맞는 코드를 작성하고 하나하나의 로직 단위로 쪼개어 잘 실행 되는지 확인해보고 다음 코드로 넘어가자.
3. 알고리즘 코드카타
1) [특강] 알고리즘 세션 2일차
: 문제를 먼저 해석하자!
1️⃣ 뼈대를 먼저 작성하기 (글로 풀어서 적어보기)
2️⃣ 작성된 뼈대를 토대로 어떤 로직을 써야하는지 먼저 생각해보자
▶️ 연습장 + 손필기로 먼저 생각해보기
3️⃣ 로직이 정상적이다라고 생각이 들면, 그때 코드로 하나씩 구현하자
4️⃣ 처음부터 코드를 짠다고 생각하지마라
🧐항상 문제가 어떻게 구현이 될 것인지 먼저 생각하고 이후에 코드 구현하자
2) 알고리즘 문제 #1
문제 1.
문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램을 작성하세요.
예를 들어, 문자열 'spartan'이 주어지면, 결과는 다음과 같아야 합니다 : { s: 1, p: 1, a: 2, r: 1, t: 1, n: 1 }”
▶️ 우선 문제에 어떤 로직을 써야 하는지 먼저 생각해보자. 💡
- 일단 문자열을 앞에서부터 하나하나 읽어 나가야겠다. (= 반복문 이용해서 Counting 하자!)
- 해당 객체에 카운트가 이미 있으면 -> +1 / 카운트가 없으면 -> 1로 세팅
- 그럼 카운트가 있는지 없는지는 어떻게 알 수 있지? 조건문 활용!
function countCharacters(str) {
let charCount = {}; //빈 객체 생성
//char의 값을 기반으로 카운팅을 해야함!
for (let i=0; i < str.length; i++) {
const char = str[i];
if (charCount[char]){
charCount[char]++;
} else {
charCount[char] = 1;
}
}
return charCount;
}
3) 알고리즘 문제 #2
문제 2.
주어진 문자열을 뒤집어서 반환하는 함수를 작성해주세요!
예를 들어, 문자열 'spartan'이 주어지면, 결과는 다음과 같아야 합니다: ‘natraps’
▶️ 생각해보자.
- 처음에는 얘를 split해서 다시 뒤집어 배열 해야하나? 생각함
- 하지만 배열이 아닌 문자열. 문자열의 순서를 뒤에서부터 순서대로 나열해보자!
- for(i=str.length-1; i>=0; i--){} 를 이용하여 'i--' 역순으로 추가하기!!
function reverseString(str){
let reversed = " "; // 빈 문자열 생성 : 역순 문자열 추가할 공간이 필요하므로!
for(i=str.length-1; i>=0; i--){
reversed += str[i]; // 빈 문자열에 문자 하나씩 추가
}
return reversed; // 뒤집힌 문자열 반환
}
하루를 마치며...🤔
오늘도 알고리즘 2일차 세션으로 하루를 시작하며 알고리즘 문제를 풀었다. 역시나 단번에 문제를 풀어 나가는 과정이 쉽지만은 않았다. 어떻게 풀어야 하나 생각은 해 봤지만, 코드로 구현해 내는 것이 결코 쉽지 않았고, 해설 혹은 설명을 들으니 충분히 이해가 갔고 해결 가능한 문제들이라고 생각이 들었다. 오늘 배운 것 처럼 처음부터 코드를 짜려고 시도하지 말고 전체적인 뼈대를 먼저 구성하고, 순서에 맞게 로직을 생각해 본 뒤에 그에 맞는 코드를 하나씩 짜나가는 연습을 꾸준히 해야겠다! 이미 배운 내용도 있고 또는 처음보는 내용들도 많아서 알고리즘 문제를 꾸준히 풀기만 해보 복습 + 학습이 충분될 것이라고 생각이 든다. 앞으로 매일 알고리즘 코드카타 시간을 이용해 새로운 문제들을 풀고, 또 새롭게 배운 개념이 있다면 잘 정리해 놓도록 하자.
또한 개인과제를 얼른 시작 해야겠다는 생각이 들어서 다시 과제를 진행하고자 하였는데, 기본적인 html, css 뼈대만 잡을 수 있었고, 순수 자바스크립트 문법만 이용하여 오픈 api를 이용해 data 가져오는 것은 아직 진행하기가 어려웠다. 얼른 강의를 마저 수강하고 직접 페이지를 만들어가면서 모르겠는 부분들을 다시 복습해가며 차근차근 익혀 나가야겠다.
한 줄 회고😎
강의를 잘 이해하고 넘어가는 것도 중요하지만, 직접 실습을 진행하면서 부딪히면서 배우는 것이 더 빠르게 성장하고 코드를 익힐 수 있는 방법인 것 같다. 강의를 너무 오랫동안 붙잡고 있지 말자.
✅내일 해야 할 일
- JS 강의 4,5 주차 수강하기 + 정리하기
- Github 에 개인과제 업로드
'TIL' 카테고리의 다른 글
[TIL] 240108(월) 첫 번째 개인 과제 코드리뷰 및 해설강의🤯 (1) | 2024.01.08 |
---|---|
[TIL] 알고리즘 문제는 매일매일 꾸준히💪🏻 / CSS도 계속 공부하기 (0) | 2024.01.05 |
[TIL] 240103(수) 알고리즘 코드카타 시작! (1) | 2024.01.03 |
[TIL] 240102(화) 2024년 청룡의 해 시작 🐉 (1) | 2024.01.02 |
[TIL] 231228(목) 웹개발 종합반 강의 복습 / 엄청난 동기부여가 된 하루 🤨 (0) | 2023.12.30 |