728x90
❓ 할리갈리
🏷️ 관련 주제 : 문자열
HashMap
Map

💦 나의 시도
Try. HashMap을 이용한 방법
BufferedReader
로 펼쳐진 카드 개수를 입력 받아 int형 변환 후, int형 변수N
에 할당- 결과로 출력할 문자열
ring
을 "NO"로 초기화 - 과일 개수를 세기 위해 키-값 구조로 조회 시, 시간복잡도가 O(1)인 HashMap을 사용
- 키 : 과일 이름
- 값 : 과일 개수
- Map.of()로 Map
halligalli
를 초기화- 과일 종류 :
STRAWBERRY
,BANANA
,LIME
,PLUM
- 과일 개수 : 0
- 과일 종류 :
- 0 ~ (N - 1) 범위에서 반복문을 돌면서
StringTokenizer
로 과일이름과 개수를 입력 받음.fruit
: 과일 이름StringTokenizer
에서 과일 이름을nextToken()
메서드로 가져와서 변수에 할당
total
: 현재 과일 총 개수- 기존 과일 개수 :
halligalli.get(fruit);
- 새로 펼친 과일 개수 :
Integer.parseInt(st.nextToken())
- (현재 과일 총 개수) = (기존 과일 개수) + (새로 펼친 과일 개수)
- 기존 과일 개수 :
halligalli
에fruit
키의 값을total
로 덮어쓰기
halligalli
의 값들 중에서 5를 포함하면ring
에YES
를 할당halligalli.values().contains(5)
BufferedWriter
를 사용하여ring
을 출력
💥 컴파일 에러 : Java 버전 문제
Map.of()를 사용한 Map 생성은 Java9부터 지원
Java8 버전으로 제출하여 컴파일 에러 발생
❌ 문제 이해 : 벨을 언제 쳐야 하는가?
입력 받을 문자열이 남아 있더라도 입력받은 문자열에서 개수가 5개인 과일이 존재하면 벨을 쳐야하는 줄 알고 YES를 출력했는데
알고보니 모든 입력을 받은 후에 과일 개수가 5개인 과일이 존재할 때, YES를 출력해야 하는 것이었음.
틀린 코드
import java.util.HashMap;
import java.util.Map;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
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 ring = "NO";
Map<String, Integer> halligalli = new HashMap<>(Map.of(
"STRAWBERRY", 0,
"BANANA", 0,
"LIME", 0,
"PLUM", 0
));
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String fruit = st.nextToken();
int total = halligalli.get(fruit) + Integer.parseInt(st.nextToken());
if (total == 5) {
ring = "YES";
break;
}
halligalli.put(fruit, total);
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(ring);
bw.close();
}
}
🎉드디어 성공!🎉
- 메모리 : 39448 KB
- 시간 : 348 ms
- 코드 길이 : 1182 B
📑제출 기록 및 오답 원인

💯 해결 방법
import java.util.HashMap;
import java.util.Map;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
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 ring = "NO";
Map<String, Integer> halligalli = new HashMap<>(Map.of(
"STRAWBERRY", 0,
"BANANA", 0,
"LIME", 0,
"PLUM", 0
));
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String fruit = st.nextToken();
int total = halligalli.get(fruit) + Integer.parseInt(st.nextToken());
halligalli.put(fruit, total);
}
if (halligalli.values().contains(5)) {
ring = "YES";
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(ring);
bw.close();
}
}
🏷️ 문제 풀면서 참고한 블로그
728x90