일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- I am Korean
- DP
- 자고 싶다
- Have a nice day.
- 우유아야
- 수학
- Java 환경 설정
- 자료구조
- SSAFY 화이팅
- 네트워크
- 우유가 옆으로 넘어지면 아야
- Hamming weight
- 아자아자 화이팅
- SSAFY IM/A
- 우유가옆으로넘어지면아야
- 코로나 싫어요
- SeongSeobDang
- amazon
- 텐션 업 10기 화이팅
- SSAFY 10기 화이팅
- HAVE A GOOD DAY
- BFS
- DFS
- SSAFY 테스트
- Have a good day :)
- 모르고리즘
- 텐션 업 10기!
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- have a nice day
- Today
- Total
Hope Everyone Is Happy
[실버5] 1316. 그룹 단어 체커 (Java) 본문
[실버5] 1316. 그룹 단어 체커 (Java)
J 크 2023. 7. 30. 23:40https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
내일 있을 일정을 위해 조금 더 기초에 가까운 문제를 여러개 풀어보는 중입니다..! 22
※ 문제를 요약하면 아래와 같습니다.
▶ 그룹 단어를 체크하는 문제입니다.
▶ 그룹 단어는 aabbbcddde 처럼 알파벳이 한 번 사용 될 때 연속으로 작성이 가능하지만, 한 번 사용한 단어는 다시 뒤에 사용되지 않습니다.
(Ex. baekjoon (o), ssafy (o), leetcode (x)
▶ 위의 조건에 따라서 입력은 맨 첫줄에 단어(소문자만)의 갯수를 입력 받고, 이후 라인 별로 하나의 단어를 입력받습니다.
▶ 출력은 입력된 단어 중 그룹 단어의 갯수를 출력합니다.
◈ Input - 1
3
happy
new
year
◈ Output - 1
3
◈ Input - 2
4
aba
abab
abcabc
a
◈ Output - 2
1
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 알파벳 소문자의 갯수는 26개로 ASCII code로는 97~122까지 해당합니다. ( a =97 ~ z = 122)
▶ 알파벳이 사용되었는지 여부를 확인하기 위해, 26의 크기를 갖는 boolean형 배열을 설정합니다.
▶ 배열의 인덱스 번호를 0번 부터 26번까지 받기 위해, 문자 비교시 -97을 실행합니다.
▶ 단어의 연속 여부를 탐색, 단어가 더 이상 사용되지 않을 경우의 번호를 true로 설정합니다.
▶ 문자 탐색 시 해당 알파벳의 방 번호가 true일 경우 그룹 단어로 카운트 하지 않습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
int nSize = Integer.parseInt(bReader.readLine());
// ASCII code a~z = 97~122
boolean[] barrASCII;
int nResult = 0;
for(int i = 0; i < nSize; i++) {
boolean bIsBreak = false;
barrASCII = new boolean[26]; // false로 초기화
String strTemp = bReader.readLine();
for(int j = 0; j < strTemp.length(); j++) {
int nIndex = strTemp.charAt(j) - 97;
if(barrASCII[nIndex]) {
bIsBreak = true;
break;
}
// 마지막 인덱스는 해당 문자 사용 여부만 체크.
if(j == strTemp.length()-1)
break;
// 단어가 바뀔경우
if(strTemp.charAt(j) != strTemp.charAt(j+1) && !barrASCII[nIndex])
barrASCII[nIndex] = true;
}
// 그룹 단어 확인 시 카운트
if(!bIsBreak)
nResult++;
}
System.out.println(nResult);
}
}
긴 글 읽어주셔서 감사합니다!
Good Luck! (피드백 고맙습니다)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[브론즈 2] 2747. 피보나치 (Java) (0) | 2023.07.31 |
---|---|
[실버1] 2178. 미로 탐색 (Java) (2) | 2023.07.31 |
[실버5] 7568. 덩치 (Java) (0) | 2023.07.30 |
[실버4] 2578. 빙고 (Java) (0) | 2023.07.28 |
[실버5] 4673. 셀프 넘버 (Java) (0) | 2023.07.27 |