일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Orace 18c
- oracle
- ORA-00922
- Oracle 사용자명 입력
- oracle 18c
- Oracle 초기 사용자
- 오라클 캐릭터셋 변경
- 오라클 캐릭터셋 확인
- 윈도우 Oracle
- Oracle Express Edition
- 무료 오라클 설치
- 서평단
- Oracle 사용자명
- ora-01722
- Oracle 테이블 띄어쓰기
- 오라클 캐릭터셋 조회
- ORA-12899
- 무료 오라클 데이터베이스
- Oracle 18c HR schema
- Oracle 윈도우 설치
- Oracle 테이블 대소문자
- Oracle 18c 설치
- Oracle 18c HR
- 비전공자를 위한 데이터베이스 입문
Archives
- Today
- Total
The Nirsa Way
[백준] 1302번: 베스트셀러 (실버4, 자료구조, 문자열, 정렬, 해시를사용한 집합과 맵 JAVA) 본문
반응형
문제 링크 : https://www.acmicpc.net/problem/1302
1302번: 베스트셀러 (실버4, 자료구조, 문자열, 정렬, 해시를사용한 집합과 맵 JAVA)
해당 문제는 가장 많이 판매된 책을 출력하는 문제입니다. 우선 사용자로부터 입력을 받고 HashMap에 담습니다. key는 책 이름, value는 판매된 횟수로 사용할 예정입니다. maxValue와 maxKey는 마지막 로직에서 가장 많이 판매된 책을 구하기 위한 변수입니다.
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());
String[] book = new String[N];
Map<String, Integer> bookCount = new HashMap<>();
int maxValue = 0;
String maxKey = "";
for(int i=0; i<N; i++) {
book[i] = br.readLine();
bookCount.put(book[i], 0);
}
}
}
이후 아래와 같은 코드를 추가 했는데, 입력받은 book 배열과 같은 책 이름을 가진 HashMap의 key를 찾고 카운트를 증가시킵니다.
for(int i=0; i<N; i++) {
if(bookCount.containsKey(book[i])) {
int getValue = bookCount.get(book[i]);
bookCount.put(book[i], ++getValue);
}
}
Entry를 사용하여 key, value를 꺼내옵니다. 이후 현재 꺼내온 value가 maxValue보다 큰지 확인하고, 해당되는 값들을 저장합니다.
for (Map.Entry<String, Integer> entry : bookCount.entrySet()) {
String key = entry.getKey();
int value = entry.getValue();
if(value > maxValue || (value == maxValue && key.compareTo(maxKey) < 0)) {
maxKey = key;
maxValue = value;
}
}
(value == maxValue && key.compareTo(maxKey) < 0) 의 경우 값이 최댓값과 동일하면서, 현재의 키 값이 maxKey보다 사전 순으로 더 앞서는 경우를 뜻합니다.
만약 아래와 같은 입력값이 들어간다면 top과 abc는 모두 판매 횟수가 4지만, abc가 사전적으로 앞에 위치했기 때문에 (value == maxValue && key.compareTo(maxKey) < 0) 에 의해 maxKey는 "abc"로 교체됩니다.
9
top
top
top
top
abc
abc
abc
abc
kimtop
최종적으로 완성된 코드는 아래와 같습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
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());
String[] book = new String[N];
Map<String, Integer> bookCount = new HashMap<>();
int maxValue = 0;
String maxKey = "";
for(int i=0; i<N; i++) {
book[i] = br.readLine();
bookCount.put(book[i], 0);
}
for(int i=0; i<N; i++) {
if(bookCount.containsKey(book[i])) {
int getValue = bookCount.get(book[i]);
bookCount.put(book[i], ++getValue);
}
}
for (Map.Entry<String, Integer> entry : bookCount.entrySet()) {
String key = entry.getKey();
int value = entry.getValue();
if(value > maxValue || (value == maxValue && key.compareTo(maxKey) < 0)) {
maxKey = key;
maxValue = value;
}
}
System.out.println(maxKey);
}
}
반응형
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1526번: 가장 큰 금민수 (브론즈1, 수학, 구현, 브루트포스 알고리즘, JAVA) (1) | 2024.01.27 |
---|---|
[백준] 1417번: 국회의원 선거 (실버5, 구현자료, 구조그리디, 알고리즘시뮬레이션, 우선순위 큐, JAVA) (1) | 2024.01.27 |
[백준] 1100번: 하얀 칸 (브론즈2, JAVA) (1) | 2024.01.20 |
[백준] 14916번: 거스름돈 (실버5, 그리디 알고리즘, JAVA) (0) | 2024.01.03 |
[백준] 14659번: 한조서열정리하고옴ㅋㅋ (브론즈1, 그리디 알고리즘, 50%~53% 시간초과, JAVA) (2) | 2023.12.29 |