본문 바로가기

Java/백준

[JAVA] 백준 7785 회사에 있는 사람

7785번: 회사에 있는 사람 (acmicpc.net)

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net

 

 

풀이 과정 

 

- 이름과 로그를 map에 저장

- entry.getValue().equals("Enter")이면 ArrayList에 저장 

((이름, "Leave")가 들어오면 Enter 값은 사라지고 갱신 -> Leave 값 삭제 불필요)

- Collections.sort(list, reverseOrder)를 통해 사전 순의 역순으로 정렬 

HashMap 

 

[Java] 자바 HashMap 사용법 & 예제 총정리 (tistory.com)

 

[Java] 자바 HashMap 사용법 & 예제 총정리

HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는

coding-factory.tistory.com

 

- HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션 

- Map은 키와 값으로 구성된 Entry 객체를 저장하는 구조를 가지고 있는 자료구조 

- 키와 값은 모두 객체 

- 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없음 

- 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지면 새로운 값으로 대치됨 

 

HashMap<String,String> map1 = new HashMap<Integer, String> (); //HashMap 생성 

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

map.remove(1); //key값 1 제거 
map.clear(); //모든 값 제거 

//HashMap 출력 

//entrySet() 활용
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도


//KeySet() 활용
for(Integer i : map.keySet()){ //저장된 key값 확인
    System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도


//Iterator 사용 
//entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<Integer, String> entry = entries.next();
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" +  entry.getValue());
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도

//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
    int key = keys.next();
    System.out.println("[Key]:" + key + " [Value]:" +  map.get(key));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도

 

- HashMap에 값을 추가하려면 put(key,value) 메소드를 사용 

 

- HashMap에 값을 제거하려면 remove(key) 메소드를 사용하면 됨 

- 오직 키 값으로만 Map의 요소를 삭제할 수 있음 

 

- 특정 key값의 vlaue를 가져오고 싶다면 get(key)를 사용 

- 전체를 출력하려면 entrySet()이나 KeySet() 메소드를 활용하여 Map의 객체를 반환받은 후 출력하면 됨 

- entrySet()은 key와 value 모두가 필요할 경우 사용하며 KeySet()은 key 값만 필요할 경우 사용 

 

 

정답 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.Collections;



public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        HashMap<String,String> map = new HashMap<String,String>();
        
        int n = Integer.parseInt(br.readLine());
        
        for(int i=0; i<n; i++)
        {
          StringTokenizer st = new StringTokenizer(br.readLine());
           String name = st.nextToken();
           String log =  st.nextToken();
           
           map.put(name,log);
        }
        
        ArrayList<String> list = new ArrayList<String>();
        for(Map.Entry<String,String>entry : map.entrySet())
        {
            if(entry.getValue().equals("enter"))
            {
                list.add(entry.getKey());
            }
        }
        
        //사전순의 역순으로 정렬
        Collections.sort(list, Collections.reverseOrder());
        
        for(String s : list)
        {
        	bw.write(s+"\n");
        }
        
        bw.flush();
        bw.close();
    }
        
}

 

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 1764 듣보잡  (0) 2024.02.13
[JAVA] 백준 10816 숫자 카드 2  (1) 2024.02.13
[JAVA] 백준 14425 문자열 집합  (0) 2024.02.12
[JAVA] 백준 17103 골드바흐 파티션  (0) 2024.02.10
[JAVA] 백준 4948 베르트랑 공준  (1) 2024.02.10