
내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트 케이스의 개수 P(1 ≤ P ≤ 1000)가 주어진다.
각 테스트 케이스는 한 줄로 이루어져 있고,
동전을 40번 던진 결과가 주어진다.
이때,
앞면은 H로,
뒷면은 T로 표현한다.
각 테스트 케이스마다 3-동전수열이 몇 번 나타났는지를 출력한다.
뒤뒤뒤,
뒤뒤앞,
뒤앞뒤,
뒤앞앞,
앞뒤뒤,
앞뒤앞,
앞앞뒤,
앞앞앞 순서대로 공백으로 구분해서 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력을 받는다.
첫 번째 입력으로 테스트 케이스의 개수 P를 읽어준다.
8개의 3-동전수열을 배열 sequences에 정의한다.
각 테스트 케이스에 대해 반복한다.
각 테스트 케이스의 동전 던진 결과를 읽고,
counts 배열을 초기화합니다.
이 배열은 각 3-동전수열의 출현 횟수를 저장한다.
결과 문자열을 순회하며 3개의 동전 결과 조합을 추출한다.
추출한 조합이 정의된 3-동전수열 중 하나와 일치하면 해당 수열의 카운트를 증가시킨다.
각 테스트 케이스에 대해 카운트를 출력합니다.
수열의 출현 횟수는 공백으로 구분하여 출력한다.
입력 -> 3-동전수열 정의 -> 테스트 케이스 반복 -> 각 수열 카운팅 -> 결과 출력 -> 종료
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2684번 문제
public class Main831 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 테스트 케이스의 개수 P를 입력받습니다.
int P = Integer.parseInt(br.readLine());
// 각각의 3-동전수열에 대한 카운트를 저장할 배열
String[] sequences = {"TTT", "TTH", "THT", "THH", "HTT", "HTH", "HHT", "HHH"};
int[] counts;
// 각 테스트 케이스에 대해 처리합니다.
for(int i = 0; i < P; i++) {
String results = br.readLine();
counts = new int[8]; // 8개의 3-동전수열에 대한 카운트를 초기화
// 결과 문자열을 순회하며 3-동전수열을 찾습니다.
for(int j = 0; j < results.length() - 2; j++) {
String seq = results.substring(j, j + 3);
for(int k = 0; k < sequences.length; k++) {
if(seq.equals(sequences[k])) {
counts[k]++;
break;
}
}
}
// 결과를 출력합니다.
for(int k = 0; k < counts.length; k++) {
System.out.print(counts[k]);
if(k < counts.length - 1) {
System.out.print(" ");
}
}
System.out.println(); // 다음 줄로 이동
}
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.