⛵ 항해99/TIL · WIL ✏️

[TIL] 2023.08.15 - 프로그래머스 / Map과 Set

hhhhy 2023. 8. 15. 23:23

 [JS 문법 종합반] 1주차 숙제 

1. 문자열 연습하기

function solution(s) {
    var answer = true;

    // 1. 대문자로 통일하기
    s = s.toUpperCase();  // 📍 toUpperCase() : 대문자로 변경해줌

    // 2. for문을 통해서 문자열의 요소를 비교하기
    // p, y와 비교하기
    var num = 0;  // 변수 num을 0으로 설정

    for (var i = 0; i < s.length; i++) {  // for문으로 돌기
        if (s[i] === 'P') {  // 변수 s의 i번째 요소가 'P'면,
            num++;  // 변수 num을 증가시키고,
        }
        if (s[i] === 'Y') {  // 변수 s의 i번째 요소가 'Y'면,
            num--;  // 변수 num을 감소시키기
        }
    }  // 'P'와 'Y'의 개수가 같다면, 변수 num은 0이 됨

    // 3. 갯수 체크(p,y 개수가 같은지 확인하는 작업)
    if (num === 0) {  // 만약 변수 num이 0이면(='P'와 'Y'의 개수가 같다면)
        answer = true;  //  변수 answer는 true가 되고,
    } else {  // 그게 아니라면(='P'와 'Y'의 개수가 같지 않다면)
        answer = false;  //  변수 answer는 false이 된다
    }

    return answer;
}

var str1 = "pPoooyY";
var str2 = "Pyy";

solution(str1);

console.log(solution(str1))

 

2. 반복문, 조건문 연습하기

function solution(absolutes, signs) {
    // 1. return해야 하는 answer 생성
    var answer = 0;

    // 2. 두 배열을 비교해서 값을 더하거나 빼주기
    // 두 배열은 크기가 같음
    for (var i = 0; i<absolutes.length; i++) {  // absolutes 요소 for문으로 돌기
        // 부호(+,=)에 따른 처리
        if(signs[i] === true) {  // 변수 signs의 i번째가 true(양수)면,
            answer = answer + absolutes[i];  // 변수 answer에는 answer에 absolutes의 i번째를 더한 값이 들어가고
        }
        if(signs[i] === false) {  // 변수 signs의 i번째가 false(음수)면,
            answer = answer - absolutes[i];  // 변수 answer에는 answer에 absolutes의 i번째를 뺀 값이 들어간다
        }
    }

    // 3. 출력
    return answer;
}

var absolutes = [4,7,12];
var signs = [true,false,true];

console.log(solution(absolutes, signs));

 

 [JS 문법 종합반] 2주차 

Map과 Set

  • Map
# Map
// key, value를 저장하는 객체와 비슷
// 객체와 차이 : key에 어떤 데이터타입(유형)도 다 들어올 수 있음
// Map은 키가 정렬된 순서로 저장되기 떄문임
// Map의 기능 : 검색(set), 삭제(delete), 제거(clear), 크기/존재 여부 확인(size)

# Map 주요 메서드와 프로퍼티
new Map()  // 맵을 만들기
map.set(key, value)  // key를 이용해 value를 저장
map.get(key)  // key에 해당하는 값을 반환,  key가 존재하지 않으면 undefined를 반환
map.has(key)  // key가 존재하면 true, 존재하지 않으면 false를 반환합니다.
map.delete(key)  // key에 해당하는 값을 삭제
map.clear()  // 맵 안의 모든 요소를 제거
map.size  // 요소의 개수를 반환

# Map 생성, 값추가, 값검색
// set과 get은 세트임
const myMap = new Map();
myMap.set('key', 'value');
console.log(myMap.get('key'));  // value

# Map의 반복 메소드 : keys(), values(), entries()
// for of 반복문은 ES6에 추가된 새로운 컬렉션 전용 반복 구문
// for of 구문을 사용하려면 컬렉션 객체가 [Symbol.iterator] 속성을 가지고 있어야 함
// iterator : 반복자

const myMap = new Map();
myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);

console.log(myMap.keys());  // [Map Iterator] { 'one', 'two', 'three' }
for (const key of myMap.keys()) {
  console.log(key);  // one two three
}

console.log(myMap.values());  // [Map Iterator] { 1, 2, 3 }
for (const value of myMap.values()) {
  console.log(value);  // 1 2 3
}

console.log(myMap.entries());  // [Map Entries] { [ 'one', 1 ], [ 'two', 2 ], [ 'three', 3 ] }
for (const entry of myMap.entries()) {
  console.log(`${entry[0]}: ${entry[1]}`);  // one: 1  two: 2  three: 3
}

# Map의 크기 및 존재 여부 확인 : size 속성, has() 메소드

console.log(myMap.size);  // 사이즈(길이)확인 : 3
console.log(myMap.has('two'));  // key 기반 검색 : true

 

  • Set
# Set
// 고유한 값을 저장하는 자료 구조
// 값만 저장
// 키를 저장하지는 않음
// 값이 중복되지 않는 유일한 요소로만 구성

# Set을 사용한 작업
// ㄴ 값 추가 및 검색, 값 삭제, 모든 값 제거, 크기 및 존재 여부 확인

# Set 생성, 값추가
const mySet = new Set();  // 생성
mySet.add('value1');  // 값추가
mySet.add('value2');
// mySet.add('value2');  // 똑같은 값 추가하면 중복된 값으로 인식해서 카운트 X
mySet.add('value3');
mySet.add('value5');
mySet.add('value8');

# Set 크기 확인, 존재 여부 확인
console.log(mySet.size); // 크기 확인
console.log(mySet.has('value1')); // true - 존재 여부 확인

# Set 반복 : iterator
for (const value of mySet.values()) {
         // 키를 저장하지 않아서 무조건 value임
  console.log(value);
}  // value1 value2 value3 value5 value8