티스토리 뷰
1. 문제
https://www.acmicpc.net/problem/19948
19948번: 음유시인 영재
감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다. 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다! 시는 대문자, 소
www.acmicpc.net
2. 문제 이해
본문 그대로 조건만 캐치해서 풀면 된다.
조건
1. 시는 대, 소문자, 공백 ( 대문자!= 소문자 )
2. 단어들의 첫 글자를 대문자 바꾸고 제목에 저장하기
3. 같은 문자 여러개일 경우 aaaaa -> a로 생각하고, Aaaa -> Aa라고 생각해야 한다 (1번 조건)
4. 알파벳을 누를 수 있는 횟수에다가 해당 문자마다 -1 해주는데, 같은 문자 일 경우에는 총 -1번 해주기
ex)
aaa vVv
a는 -1번만 깎고, v는 3번 깎아야 한다.
5. 제목을 다 완성하고, 제목에 해당되는 애들도 작성할 수 있는지 판단해주기 ( 횟수에서 빼주기)
+ 100%에서 왜 틀려... 아니 틀린 이유: 같은 애들 그냥 안 깎아줌, 제목 + 내용이라는 거....!!!!! (100% 가서 틀림.. 바보 멍청이)
3. 풀이 방법
1. map에 알파벳 a -z까지 횟수 넣어줬음 (key는 알파벳, value는 횟수) -> 알파벳은 소문자로 넣어줌
2. 제목은 StringBuilder에 넣어줄 거임
3. 입력받은 시. legnth 돌면서 조건에 맞게 뺴줬음( getOrDefault() 사용해서 있으면 -1 이렇게 해줬음)
4. String이면 String, Character이면 Character로 바꿔주기!! 하나로만 해주기
그리고 Character로 이용하였고 (이용한 이유: 'a'+i 해서 알파벳을 쉽게 넣어주려고) 나는 소문자로 바꿔줘서 비교해줬음
5. map.get( key) -> 해당 횟수가 0보다 작을 경우엔 -1 출력하고 return 해줬음
6. 마지막에 꼭 제목도 똑같이 계산해줘야 함!!!! 까먹지 말긔!!!!!!!!!!
4. 코드
package net.acmicpc.solution;
import java.io.*;
import java.util.*;
public class Solution_19948_음유시인영재 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] ch = br.readLine().toCharArray();
char tmp = ch[0];
Map<Character, Integer> map = new HashMap<>();
map.put(' ', Integer.parseInt(br.readLine()));
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < 26; i++) {
map.put((char) ('a' + i), Integer.parseInt(st.nextToken()));
}
// System.out.println(map);
StringBuilder sb = new StringBuilder();
sb.append(Character.toString(tmp).toUpperCase());
map.put(Character.toLowerCase(tmp), map.getOrDefault(Character.toLowerCase(tmp), 0) - 1);
for (int i = 1; i < ch.length; i++) {
if (ch[i] != tmp) {
map.put(Character.toLowerCase(ch[i]), map.getOrDefault(Character.toLowerCase(ch[i]), 0) - 1);
if (tmp == ' ') {
sb.append(Character.toString(ch[i]).toUpperCase());
}
}
if (map.get(Character.toLowerCase(ch[i])) < 0) {
System.out.println(-1);
return;
}
tmp = ch[i];
}
for (int i = 0; i < sb.length(); i++) {
char c = Character.toLowerCase(sb.toString().charAt(i));
map.put(c, map.getOrDefault(c, 0) - 1);
if (map.get(c) < 0) {
System.out.println(-1);
return;
}
}
System.out.println(sb.toString());
}
}
5. 회고
진짜 챙피하지만.. 5번의 실패를 끝에 문제를 풀었다... 진짜......
그 이유는 문제 자체는 어렵지 않은데..... 내가 문제를 꼼꼼히 안 본 탓이라고 생각한다.
또한, 성격 급한 나는 어떻게 풀 건지 조건만 정리되면 바로 코드 구현하기 바빴기 때문에...(결정적..)
실버 3 너무 만만하게 봤다.. 미안해.. 앞으로 꼼꼼히 보자.. 수민아.. 하하....
피드백은 언제나 환영입니다 :) 🌳
'algo > 백준' 카테고리의 다른 글
[백준] 1912_연속합 (JAVA) (0) | 2022.09.19 |
---|---|
[백준] 20055_컨베이어 벨트 위의 로봇(JAVA) (2) | 2022.09.19 |
[백준] 20300_서강근육맨 💪 (JAVA) (0) | 2022.06.30 |
[백준] 12933_오리 (JAVA) (0) | 2022.06.27 |
[백준] 16439_치킨치킨치킨 🍗 (JAVA) (2) | 2022.06.26 |
- Total
- Today
- Yesterday
- 서울ICT이노베이션
- 메서드형 void
- 백준 멀티버스 자바
- IT개발캠프
- 할인행사 자바
- 18868 멀티버스 java
- 백엔드
- java 마법사 상어와 파이어볼
- 프로그래머스 할인행사
- 자바 return
- 1개 Key 여러개 Value
- java 멀티버스
- 프론트엔드
- 플그 멀리 뛰기
- 멀리 뛰기 자바
- HashMap 자바
- 정보통신산업진흥원
- 16234 마법사 상어와 파이어볼
- 마법사상어와 파이어볼
- 멀티버스 java
- 유데미
- AI교육
- level2 롤케이크 자르기
- AI캠프
- JAVA 컬랙션
- AI-WEB 교육
- JAVA 할인행사
- Java 멀리 뛰기
- 프로그래머스 롤케이크자르기
- NIPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |