프로그래머스 lv1 0701

HyeJi9908·2022년 7월 1일
0

[JAVA] 프로그래머스

목록 보기
1/11

🔎 개념

배열 형태로 출력

System.out.println(Arrays.toString(number));

for-loop vs Stream

for-loop가 더 빠르다.

HashMap : key-value 형식.

HashMap<Integer,String> map = new HashMap<>(); // 선언

map.put(1,"사과"); // 값 추가
map.put(2,"바나나");

map.get(1);        // key값 1의 value얻기

map.containKey(1); // key중에 1이 있는지 bool 반환

map.remove(1);    // key값으로 1인 요소 제거
map.clear();      // 모든 요소 제거

//for문
for (String key : map.keySet()) {}

📚 신고 결과 받기 - Hash

import java.util.HashMap;
import java.util.HashSet;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        HashMap<String,Integer> id_index = new HashMap<>(); 
        HashMap<String,HashSet<String>> report_map = new HashMap<>(); // key:신고받은 사람 - value:신고한 사람리스트
        // HashSet<> : 동일한 유저에 대한 신고는 중복이 불가함. (예시2번 참고)
        
        // 초기화
        for(int i=0;i<id_list.length;i++) {
        	id_index.put(id_list[i], i); // 마지막에 answer에 id_list의 원소 순서에 맞게 값을 할당하기 위함
        	report_map.put(id_list[i], new HashSet<String>());
        }
        
        // 신고된 사람들이 누구에게 지목을 받았는지
        for(String r : report) {
        	String[] id = r.split(" ");
        	report_map.get(id[1]).add(id[0]); // key = id[1](신고받은 사람)의 value[]에 id[0](신고한 사람)추가
        }
        
        // answer에 id_list의 원소 순서에 맞게 신고확정된 사람등 수 할당
        for(String id:id_list) {
        	HashSet<String> str = report_map.get(id); // id를 지목한 사람들 리스트 얻기
        	if (str.size()>=k) {  	// 지목한 사람들의 수가 k명 이상일 때
        		for( String name:str) {
        			answer[id_index.get(name)]++; // name에 해당하는 사람의 인덱스에 값 할당
        		}
        	}
        }
        return answer;
    }
}

0개의 댓글