TIL - 2021.06.04

Yuum K·2021년 6월 6일

TIL

목록 보기
5/12

🧐오늘 한 일

  • 프로그래머스(Lv2) 카카오블라인드2021 순위검색 (DFS, 경우의 수, HashMap, Bit)
  • 프로젝트(Advist) - 어드민 페이지에서 기획전 페이지 관리API 만들기

😁 알게 된 점

프로그래머스(Lv2) 카카오블라인드2021 순위검색에서 메뉴의 모든 조합을 구하는 부분을 BitMask를 이용하는 것을 공부했다.
애초에 '-'이 경우를 0 'java'같은 단어가 나오는 경우를 1로 생각해 집합을 만들었다고 가정을 하면 된다. 그렇게 되면 '-javabackend-pizza'라면 01101로 된다. 그러면 총 반복하게 되는 횟수는 222*2가 된다. (처음에 1, 0을 값이 있다, 없다 로만 해석해서 이해하는데 애를 먹었다..ㅠ)
해서 모든 경우에 수(집합의 부분집합들)를 돌리면서 info 배열에 있는 값들과 비교해서 그 위치에 해당 하는 것이 1일 때 그 단어가 있는 것이기 때문에 stringBuilder에 넣어준다. ⇒ 결국에는 'javabackendpizza'로 stringBuilder에 담기게 되고 그것을 key로 하는 map에 코테 점수를 value에 담으면 된다.
⇒ 이렇게 하면 나중에 query배열과 비교 할때 '-'부분까지 따로 고민할 필요 없다.

//		모든 (info에 가지고 있는 것들 + "-")로 나올수 있는 조합표를 만듬
        Map<String, List<Integer>> map = new HashMap<>();
        for (String in : info) {
            String[] split = in.split(" ");
            int score = Integer.parseInt(split[4]);

//            2*2*2*2 => 있고 없고 로 만든 집합의 부분집합을 구하면 조합을 구할 수 있다.
            for (int i = 0; i < (1 << 4); i++) {
                StringBuilder key = new StringBuilder();
                for (int j = 0; j < 4; j++) {
//                	자리수들 중 하나라도 일치한다는 의미 -> 추가해주기
//                	1010 -> 1000이면 1->java가 일치 (여기서 0은 없다가 아니고 -의미)
//                	1010 -> 0010이면 javapizza
                    if ((i & (1 << j)) != 0) key.append(split[j]);
                }
//                key만 map에 삽입하면 널포인트 에러(초기화 안해서..)
//                key를 삽입할 때 value를 List로 초기화 한 후 score점수를 넣겠다는 의미
                map.computeIfAbsent(key.toString(), s -> new ArrayList<>()).add(score);
            }
        }

<!전체 코드! 주석으로 설명 적어 놨습니다!>
kangum99/AlGORITHM

Advist - 어드민에서 기획전 관리를 위해 필요한 API는 총 5가지다.
1. 기획전들을 리스트로 한눈에 볼 수 있게 하는 API [GET]
2. 기획전 하나를 상세히 볼 수 있게 하는 API [GET]
3. 기획전 하나를 수정할 때 기획전에 들어갈 item을 전체 item리스트 중에 고를 수 있게 전체 item리스트를 볼수 있게 하는 API [GET]
4. 기획전 하나를 수정했다면 해당 기획전에 대한 데이터 베이스의 값을 update할 API [POST]
5. 기획전을 새로 하나 만들었을 때 데이터 베이스에 새로 테이블을 만들어 값을 insert할 API [POST]

😎 다짐

  1. 저 알고리즘 문제를 과연 그냥 시험볼 때 마주치면 저렇게 풀것이라고 생각해 낼 수 있을 까? .. 그런 경지또는 그 이상이 될 수 있을 때 까지 알고리즘을 달려보자!
profile
후회 하지 않기 위해 노력하는 개발자

0개의 댓글