//GitHub https://github.com/vellimole0621
vellimole0621 - Overview
vellimole0621 has 4 repositories available. Follow their code on GitHub.
github.com
백준 1343번 : 폴리오미노
(문제 - https://www.acmicpc.net/problem/1343)
문제 설명 :
. 과 X로 구성된 문자열을 입력받아 XXXX인 경우 AAAA를 / XX인 경우 BB를/ .은 .을 출력하라. 만약 바꿀 수 없는 경우 -1을 출력하라.
풀이 : 문자열 입력 받음 >> 문자열을 문자 배열로 변경시킴 >> X 개수 중간 저장 변수(temp) 생성 / AAAA 개수 저장 변수 생성 / BB 개수 저장 변수 생성 / -1 정할 변수(point) 생성 >> 먼저 -1인 경우 확인 하기 위해서 반복문 생성 >> 문자열 중 문자가 X인 경우 temp를 증가 시킴>> .이 되었을 때 temp를 2로 나눠서 만약 나머지가 존재하면 point 값 증가 >> point가 0이 아니면 -1 출력 or 0이면 다시 반복문 >> 마찬가지로 X인 경우 temp 증가, .을 만났을 때 or 마지막 문자일 때 temp를 4로 나눈 수 만큼 AAAA 출력, 그 수 만큼 temp를 빼고 난 뒤 2로 나눈 수 만큼 BB 출력
// 1343 번
package algorithm.S2208;
import java.util.*;
public class Solve220815 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String Pol = sc.nextLine(); // 입력 문자
char[] pol = Pol.toCharArray(); // 문자열 > 배열화
int temp = 0; // X 개수 중간 저장값
int temp_4 = 0; // AAAA의 개수
int temp_2 = 0; // BB의 개수
int point = 0; // -1 정할 기준
for(int i=0; i<pol.length; i++){
if(pol[i] == 'X'){ // 문자열 중 문자가 X인 경우
temp++; // temp 증가
}else if(pol[i] == '.'){ // .인 경우
if(temp%2 != 0){ // AAAA 나 BB 모두 아닌 경우
point++; // point 증가
}
temp = 0; // temp 초기화
}
if(i==pol.length-1){ // 문자열의 끝(마지막 . 뒤의 temp 값)
if(temp % 2 != 0){ // AAAA 나 BB 모두 아닌 경우
point++; // point 증가
}
}
}
temp = 0; // temp 초기화
if(point != 0){ // point가 0이 아님(AAAA 나 BB가 아닌 경우 있음)
System.out.print(-1); // 기준 안 맞으므로 -1
}else{ // 이외
for(int i=0; i<pol.length; i++){
if(pol[i] == 'X'){
temp++;
}else if(pol[i] == '.'){
temp_4 = temp/4; //저장된 temp 4로 나눠 AAAA 개수 파악
temp_2 = (temp -temp_4*4)/2; //저장된 temp, AAAA 개수 제외 BB 개수 파악
for(int j=0; j<temp_4; j++){
System.out.print("AAAA"); // AAAA 출력
}
for(int k=0; k<temp_2; k++){
System.out.print("BB"); // BB 출력
}
temp = 0; // temp / temo_4 / temp_2 초기화
temp_4 = 0;
temp_2 = 0;
System.out.print('.'); // , 출력
}
}
if(temp != 0){ // 마지막 . 이후로 temp가 남은 경우 , 마무리 출력
temp_4 = temp/4;
temp_2 = (temp -temp_4*4)/2;
for(int j=0; j<temp_4; j++){
System.out.print("AAAA");
}
for(int k=0; k<temp_2; k++){
System.out.print("BB");
}
}}
sc.close();} // Scanner 닫기
}
어려웠던 점 : 문제를 해결하기는 했지만, 코드 상의 지저분한 부분이 많이 존재하는 듯 보인다. 반복되는 부분을 제거할 방법이 있을 것 같은데. 다음에 클래스를 생성하는 방법등을 고려해보아야겠다.
'프로그래밍 > Java' 카테고리의 다른 글
[자바 JAVA/알고리즘] 백준 1152번 : 단어의 개수 (0) | 2022.08.19 |
---|---|
[자바 JAVA/알고리즘] 백준 1105번 : 팔 (0) | 2022.08.19 |
[자바 JAVA/알고리즘] 백준 2839번 : 설탕 배달 (0) | 2022.08.18 |
[자바 JAVA/알고리즘] 백준 1476번 : 날짜 계산 (0) | 2022.08.18 |
[자바 JAVA/알고리즘] 백준 1340번 : 연도 진행바 (0) | 2022.08.16 |