문제 : boj27160
필요 알고리즘 개념
- 문자열, 구현
- 문자열을 파싱해 나온대로 구현해주는 문제이다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
각 과일의 종류별로 입력된 과일의 개수를 모두 더해준다. 과일의 종류별로 봤을 때 더한 값이 5인게 하나라도 있다면 "YES"를 출력해주면 되는 문제이다.
이 때 과일의 종류는 문자열이므로 HashMap<String, Integer>로 과일의 종류 문자열을 key, 합산 개수를 value로 하는 Map 자료구조를 써도 된다. 내 경우엔 어차피 4종류밖에 없으므로 각 과일별로 0~3까지의 인덱스를 붙여 배열에 카운팅해줬다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private void solution() throws Exception {
int n = Integer.parseInt(br.readLine());
int[] cnt = new int[4];
while (n-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int num = Integer.parseInt(st.nextToken());
int nameToIdx = 0;
switch (name) {
case "STRAWBERRY": nameToIdx = 0; break;
case "BANANA": nameToIdx = 1; break;
case "LIME": nameToIdx = 2; break;
case "PLUM": nameToIdx = 3; break;
}
cnt[nameToIdx]+=num;
}
for (int i = 0; i < 4; i++)
if (cnt[i] == 5) {
System.out.println("YES");
return;
}
System.out.println("NO");
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 27162 - Yacht Dice (java) (0) | 2023.01.15 |
---|---|
[자바] 백준 27161 - 크레이지 타임 (java) (0) | 2023.01.15 |
[자바] 백준 27159 - 노 땡스! (java) (0) | 2023.01.15 |
[자바] 백준 13699 - 점화식 (java) (0) | 2023.01.14 |
[자바] 백준 17609 - 회문 (java) (0) | 2023.01.13 |
댓글