반응형
https://www.acmicpc.net/problem/27160
1) 내가 구현한 코드
- 과일의 종류 상관없이 입력받은 과일만큼 과일의 갯수가 업데이트 되도록 구현함
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception{
// List temp = List.of("123", "123123");
// System.out.println(temp);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
HashMap<String,Integer> map = new HashMap<>();
for(int i=0; i<N; i++){
String[] fruits = br.readLine().split(" ");
//System.out.println(fruits);
int cnt = map.getOrDefault(fruits[0],0)+Integer.parseInt(fruits[1]);
map.put(fruits[0],cnt);
}
// System.out.println(map);
String answer = "NO";
/*
for(Integer cnt : map.values()){
if(cnt == 5) {
answer ="YES";
}
}
*/
if (map.containsValue(5)) {
answer ="YES";
}
bw.write(answer);
bw.flush();
br.close();
bw.close();
}
}
2) 오늘의 학습 키워드
- 해시맵을 통한 데이터 관리
- 조건문 사용하여 특정 조건 확인하기
- 시간 복잡도 개선
3) 문제 이해
이 문제는 보드게임 할리갈리의 룰을 이용하여,
펼쳐진 카드 중 특정 과일의 개수가 정확히 5개일 때 종을 쳐야 한다는 조건을 코드로 구현하는 것이다.
목표는 카드 목록을 순회하며 조건을 만족하는 과일이 있는지 확인하는 것이다.
4) 문제 해결 과정
1. 문제 접근 :
- 각 과일 종류의 개수를 저장하기 위해 HashMap을 사용한다.
- 카드 정보를 읽고 해당 과일의 총 개수를 업데이트한 후,
개수가 정확히 5가 되는 시점에 “YES”를 출력하고 즉시 종료한다. - 카드를 모두 확인했는데도 조건을 만족하는 과일이 없다면 "NO"를 출력한다.
2. 해결 과정 :
- 해시맵 초기화: 딸기, 바나나, 라임, 자두 각각의 개수를 0으로 초기화하여 과일별 개수를 추적한다.
- 반복문을 통한 개수 업데이트: 각 카드 정보를 읽어들여 과일의 총 개수를 업데이트한다.
- 조건 확인: 개수를 더할 때마다, 과일의 총 개수가 정확히 5가 되었는지 확인하여 조건을 만족하면 즉시 "YES"를 출력한다.
- 최종 출력: 조건을 만족하는 과일이 없을 경우, “NO”를 출력한다.
3. 추가 구현 코드 :
import java.util.HashMap;
import java.util.Scanner;
public class HalliGalli {
public static String shouldRingBell(int n, String[][] cards) {
// 해시맵을 이용해 과일별 개수를 관리
HashMap<String, Integer> fruitCounts = new HashMap<>();
fruitCounts.put("STRAWBERRY", 0);
fruitCounts.put("BANANA", 0);
fruitCounts.put("LIME", 0);
fruitCounts.put("PLUM", 0);
// 카드 목록을 순회하며 과일 개수 업데이트
for (int i = 0; i < n; i++) {
String fruit = cards[i][0];
int count = Integer.parseInt(cards[i][1]);
// 현재 과일 개수를 업데이트
fruitCounts.put(fruit, fruitCounts.get(fruit) + count);
// 과일 개수가 정확히 5개가 되는 경우 "YES" 반환
if (fruitCounts.get(fruit) == 5) {
return "YES";
}
}
// 조건을 만족하는 과일이 없는 경우 "NO" 반환
return "NO";
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 받기
int n = scanner.nextInt();
scanner.nextLine(); // 줄바꿈 처리
String[][] cards = new String[n][2];
for (int i = 0; i < n; i++) {
cards[i][0] = scanner.next();
cards[i][1] = scanner.next();
}
// 결과 출력
System.out.println(shouldRingBell(n, cards));
}
}
5) 새로운 배움
- HashMap을 사용하여 데이터를 효율적으로 관리할 수 있는 방법을 익혔다.
- 이를 통해 각 과일의 개수를 빠르게 업데이트하고 확인할 수 있어 시간 복잡도를 최소화할 수 있었다.
- 조건을 충족하면 반복문을 종료함으로써, 불필요한 연산을 줄이고 코드의 효율성을 높일 수 있다는 점을 배웠다.
6) 내일의 학습 목표
- 해시맵을 활용한 데이터 관리의 심화 학습
- 다양한 조건의 문제에 대해 시간 복잡도를 고려한 최적화 연습
- 복잡한 조건을 효율적으로 구현하는 연습
7) 추가 문제
미들러 - 나무자르기
https://www.acmicpc.net/problem/2805
챌린저 - 키 순서
https://www.acmicpc.net/problem/2458
반응형
'coding_test' 카테고리의 다른 글
[99클럽 4기 코테 스터디 TIL 7일차] 전주 듣고 노래 맞히기 (feat. 해시맵) (1) | 2024.11.03 |
---|---|
자바의 List 객체와 String 배열의 차이 및 출력하는법 (0) | 2024.11.02 |
[99클럽 4기 코테 스터디 TIL 5일차] 모스부호 (feat. 해시맵, BufferedReader, Bufferedwriter) (0) | 2024.11.01 |
[99클럽 4기 코테 스터디 TIL 4일차 보너스문제] 의상 (feat. 해시맵) (1) | 2024.10.31 |
[99클럽 4기 코테 스터디 TIL 4일차] 숫자 문자열과 영단어 (0) | 2024.10.31 |