https://www.acmicpc.net/problem/1343
너무 어렵게 접근한 문제
원래는 이런 길고 복잡한 코드로 풀려고 했다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class n1343 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb;
StringBuilder result = new StringBuilder();
ArrayList<String> ArrayList = new ArrayList<String>();
ArrayList<String> dotList = new ArrayList<String>();
String str = br.readLine();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '.') {
sb = new StringBuilder();
sb.append(str.charAt(i));
while (i != str.length() - 1 && str.charAt(i + 1) == '.') {
sb.append(str.charAt(i));
i++;
}
dotList.add(sb.toString());
}
}
String[] arr = str.split("[.]");
int d = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i].length() == 0) {
result.append(".");
continue;
}
if (arr[i].length() % 2 != 0) {
result.setLength(0);
result.append("-1");
break;
}
if (arr[i].length() % 2 == 0) {
if (arr[i].length() >= 4) {
sb = new StringBuilder();
for (int j = 0; j < arr[i].length() / 4; j++) {
result.append("AAAA");
}
for (int j = 0; j < arr[i].length() % 4 - 1; j++) {
result.append("BB");
}
} else {
result.append("BB");
}
if(i!=arr.length-1) {
result.append(".");
}
}
}
if (result.length() == 0) {
result.append("-1");
}
bw.write(result.toString());
bw.flush();
bw.close();
br.close();
}
}
한 1~2시간 고민을 했는데 안돼서 ㅠㅠ
다른 사람 풀이를 봤는데 replace메소드를 사용하더라..
메소드를 잘 몰라서 그런 방법을 아예 생각을 안해봤다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class n1343 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
str=polyomino(str);
bw.write(str);
bw.flush();
bw.close();
br.close();
}
public static String polyomino(String str) {
str= str.replaceAll("XXXX", "AAAA");
str = str.replaceAll("XX", "BB");
if(str.contains("X")) {
str="-1";
}
return str;
}
}
자바 기본기를 잘 공부해둬야겠다고 생각했다.
https://www.acmicpc.net/problem/1817
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class n1817 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] books = new int[n];
if (n != 0) {
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
books[i] = Integer.parseInt(st.nextToken());
}
}
int box = 0;
int sum = 0;
for (int i = 0; i < n; i++) {
sum = 0;
if (books[i] == 0) {
continue;
}
for (int j = i; j < n; j++) {
if (books[j] == m) {
break;
}
if (books[j] != 0 &&sum+books[j]<=m ) {
sum += books[j];
books[j] = 0;
}else {
break;
}
}
books[i] = 0;
box++;
}
bw.write(String.valueOf(box));
bw.flush();
bw.close();
br.close();
}
}
크게 어렵진 않은 문제였다.
다만 책을 '순서대로' 넣는다는 것이 중요하다.
순서대로 넣지 못하면 break를 시키고 box의 수를 올려야 한다.
https://www.acmicpc.net/problem/1652
이것도 아주 어렵지 않다.
...X..X.. 과 같은 패턴이 나오면
가로로 3자리가 나온다.
이런 패턴이 나올때를 대비하여 if-else문을 적절히 사용해야 할 것이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n= Integer.parseInt(br.readLine());
char[][] arr=new char[n][n];
StringTokenizer st;
String str="";
for (int i = 0; i < n; i++) {
str=br.readLine();
arr[i]= str.toCharArray();
}
int count=0;
int row=0; //세로, 열
int col=0; //가로 , 행
//가로 구하기
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr.length-1;j++) {
if(arr[i][j]=='.' && arr[i][j+1]=='.') {
if(count==0) {
count+=2;
}else {
count++;
}
}else {
if(count>=2) {
col+=1;
count=0;
}
}
}
if(count>=2) {
col+=1;
}
count=0;
}
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr.length-1;j++) {
if(arr[j][i]=='.' && arr[j+1][i]=='.') {
if(count==0) {
count+=2;
}else {
count++;
}
}else {
if(count>=2) {
row+=1;
count=0;
}
}
}
if(count>=2) {
row+=1;
}
count=0;
}
bw.write(String.valueOf(col+" "+row));
bw.flush();
bw.close();
br.close();
}
}
https://www.acmicpc.net/problem/1769
이 문제는 간단해 보이지만 정해진대로 풀지 않으면 시간초과나 메모리 초과, 런타임 에러를 보기 쉽다.
이 문제는 처음에 수를 받을때 int, double형 등 Number 자료형으로 받으면 안된다.
10000000이상의 '수'가 아니라 '1000000자리 이상의 수' 이기 때문에 아주아주아주 큰 수도 들어 와 런타임에러가 나기 때문이다.
그렇기 때문에 String 형식으로 받고, 자릿수만 구해서 더해주는 형식이어야 한다.
또 한 자릿 수는 루프를 돌지 않기 때문에 count가 0이 나오도록 해주어야 한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int sum = 0;
int count = 0;
String str = br.readLine();
if (str.length() != 1) {
while (true) {
sum = 0;
count++;
for (int i = 0; i < str.length(); i++) {
sum += str.charAt(i) - '0';
}
if (sum < 10) {
break;
}
str = String.valueOf(sum);
}
}else {
sum=Integer.parseInt(str);
}
bw.write(String.valueOf(count) + "\n");
if (sum == 3 || sum == 6 || sum == 9) {
bw.write("YES");
} else {
bw.write("NO");
}
bw.flush();
bw.close();
br.close();
}
}