반응형
이름과 출입여부를 공백을 두고 입력받고, enter라면 출근, leave 라면 퇴근으로 할 때,
모든 입력이 끝난 후 회사에 남아 있는 사람의 이름을 출력하는 문제.
사전순의 역순으로 출력한다는 점에 주의할 것.
Hashset을 이용하여 회사원들의 출입관리를 하면 될 듯 하다.
2023.10.17 - [Java/개념정리] - [Java] HashSet 에 대해 알아보자
문자열 분리는 StringTokenizer를 사용하면 간단히 해결.
2023.10.25 - [Java/개념정리] - [Java] 문자열 분리 (split, StringTokenizer 사용법)
반복문을 통해 입력받으면서 해당 사원의 상태가 leave 라면 Hash에서 제거해준다.(remove()메소드 이용)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
HashSet<String> worker = new HashSet<String>(); // Hash 생성
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine()); // 입력받은 문자열 분리
String name = st.nextToken(); // 분리한 문자의 첫번째(이름)
String status = st.nextToken(); // 분리한 문자의 두번째(상태)
worker.add(name); // Hash에 이름 추가
if (status.equals("leave")) { // leave 인 경우에는
worker.remove(name); // Hash에서 해당 사원 이름 삭제
}
}
위 과정을 거치고 나면 Hash에는 회사에 남아 있는 사원들의 이름만 저장되어 있을 것이다.
이제 역순으로 정렬해서 출력해보자.
Hashset에는 toArray라는 메소드가 있다. 이는 Hash에 저장된 모든 원소들을 갖는 배열을 만들어 주는 메소드이다.
이를 이용해 배열로 바꿔 준 후, Arrays.sort기능을 이용해서 정렬해주자.
2023.10.20 - [Java/개념정리] - [Java] 배열 정렬하기 (Arrays.sort(), Collections.reverseOrder() 사용)
String[] ary = worker.toArray(new String[worker.size()]); // Hash 원소로 배열 만들기
Arrays.sort(ary, Collections.reverseOrder()); // 사전 역순 정렬
for (String s : ary) { // 출력
System.out.println(s);
}
마지막으로 반복문을 통해 배열의 원소를 한줄씩 출력해주면 완성.
전체 코드는 다음과 같다.
// 해설참조 : sehyeok.tistory.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
HashSet<String> worker = new HashSet<String>(); // Hash 생성
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine()); // 입력받은 문자열 분리
String name = st.nextToken(); // 분리한 문자의 첫번째(이름)
String status = st.nextToken(); // 분리한 문자의 두번째(상태)
worker.add(name); // Hash에 이름 추가
if (status.equals("leave")) { // leave 인 경우에는
worker.remove(name); // Hash에서 해당 사원 이름 삭제
}
}
String[] ary = worker.toArray(new String[worker.size()]); // Hash 원소로 배열 만들기
Arrays.sort(ary, Collections.reverseOrder()); // 사전 역순 정렬
for (String s : ary) { // 출력
System.out.println(s);
}
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #2559 수열 (53) | 2023.12.13 |
---|---|
[Java] 백준알고리즘 #11659 구간 합 구하기 4 (66) | 2023.12.12 |
[Java] 백준알고리즘 #14425 문자열 집합 (52) | 2023.10.26 |
[Java] 백준알고리즘 #10815 숫자 카드 (67) | 2023.10.25 |
[Java] 백준알고리즘 #25501 재귀의 귀재 (1) | 2023.10.23 |