본문 바로가기
개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 3일차 TIL + 오늘의 학습 가이드

by 킴도비 2024. 7. 24.

💡 오늘의 학습 키워드

  • 문자열
  • TreeMap
  • 정렬

 

✅ 오늘 공부한 내용

  • 오늘은 배열에 대해 공부를 했다.
  • 배열의 다양한 정렬 방법에 대해 공부했다.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 오늘의 프로그래머스 문제! 문자열 내 마음대로 정렬하기

 

👀 오늘의 회고

🤣 오늘의 문제점

  • key와 value에 대해 어떻게 배열할 것인가?
  • 어떤 배열이 순서대로 저장할 수 있는가?
  • 배열의 key 값과 value 값을 추출해 어떻게 활용할 수 있는가?
  • 에 대한 공부를 하게 되었다. 해당 부분들에 대해 자세하고 정확하게 아는 지식이 없었기에 다시 복습하였다.

 

🔥 어떤 시도를 했는가?

  • 1차로 HashMap을 사용했으나 sort를 몇 번 사용해야 한다는 번거로움이 생겼다.
  • 그래서 다른 방법을 찾아보았다. 해보니 TreeMap은 key 값을 자동 정렬해준다는 것을 알게 되었다.
  • 초반에 실수로 strings.charAt(n)으로 키를 설정했다가 중복 키 입력이 되지 않았기에 key와 value 위치를 바꿔주었다.
  • ArrayList를 사용하여 keySet을 알파벳 순으로 담아줬다.(중복되는 value가 있을 때 앞에 배치해주기 위해서)
  • 2차로 할 때는 잘 정렬됨을 확인 이후 람다를 사용하여 value 값 정렬로 배치해주었다.
  • 그 이후는 for문을 돌려서 해당 값을 answer 배열에 넣어 주었다.
  • 아래는 완성 코드✨
import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        
        TreeMap <String, String> tm = new TreeMap<>();
        
        int len = strings.length;
        
        for(int i = 0; i < len; i++){
            tm.put(strings[i], strings[i].charAt(n) + "");
        }
        
        List<String> keySet = new ArrayList<>(tm.keySet());
        
        keySet.sort((o1, o2) -> tm.get(o1).compareTo(tm.get(o2)));
        
        String[] answer = new String[len];
        
        int cnt = 0;
        
        for(String key : keySet){
            answer[cnt++] = key;
        }
            
        return answer;
    }
}

 

👏 무엇을 새로 알았는가?

  • TreeMap 사용법
  • keySet으로 key 값들만 저장하는 법
  • 람다식을 이용한 value 정렬
// TreeMap 사용한 방법

import java.util.*;

TreeMap <String, String> tm = new TreeMap<>();

tm.put(strings[i], strings[i].charAt(n) + "");

// TreeMap Key를 ArrayList에 저장하기
List<String> keySet = new ArrayList<>(tm.keySet());

// TreeMap Value 값으로 저장하여 배열 정렬하기
// TreeMap Value 값 가져오는 법 -> tm.get(o1)
// o1이 key이다. key 값으로 value 값 가져온다.
keySet.sort((o1, o2) -> tm.get(o1).compareTo(tm.get(o2)));
  • (그런데 다른 사람 풀이 보기를 하니 엄청난 분들이 많았다.. 역시 보고 배울 게 많은 것 같다. 꼭 한번 참고해보길..!)

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 내일은 오늘 한 거 다른 분들 소스 코드 학습해보기
  • 항해 99 코테 문제 미리 풀어서 온라인 미리 준비하기!
  • 프로그래머스 못 푼 문제 마저 풀기
  • 자소서 점검 😭😭😭😭