728x90
∮1018번: 체스판 다시 칠하기 (acmicpc.net)
일단 N행 M열만큼 배열 array[N][M]에 한 글자씩 저장하기 !
BufferedReadLine으로 한 줄씩 읽어와서 charAt으로 찢어서 저장.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
char array[][] = new char[N][M];
for(int i=0;i<N;i++) {
String str = br.readLine();
for(int j=0;j<M;j++) {
array[i][j] =str.charAt(j);
}
}
내가 완성한 코드
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int count = 0;
int min=100;
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
char array[][] = new char[N][M];
for(int i=0;i<N;i++) {
String str = br.readLine();
for(int j=0;j<M;j++) {
array[i][j] =str.charAt(j);
}
}
for(int q=0;q<=N-8;q++) {
for(int w=0;w<=M-8;w++){
char c = array[q][w];
count=0;
//System.out.println(q+" "+w);
for(int j=q;j<q+7;j+=2) { //짝수행들 검사
for(int k=w;k<w+7;k+=2) {//짝수열 검사
if(c != array[j][k])
count ++;
}
for(int o=w+1;o<=w+7;o+=2) {//홀수열 검사
if(c == array[j][o])
count ++;
}
}
for(int j=q+1;j<=q+7;j+=2) { //홀수행들 검사
for(int k=w+1;k<=w+7;k+=2) {//홀수열들 검사
if(c != array[j][k])
count ++;
}
for(int a=w;a<w+7;a+=2) {//짝수열들 검사
if(c == array[j][a])
count++;
}
}
//System.out.println(count);
if( min > count) {
min = count;
//System.out.println("min"+min);
}
}
}
System.out.println(min);
}
}
맨 윗줄 첫칸을 기준으로 두고 다른 색을 칠하면 되는 문제인 줄 알았는데 문제 이해를 잘못했나보다
이거 때문에 글케 생각했는데..
아무튼 그래서 맨 윗 줄 첫 칸을 기준으로 두고 다른 칸들을 짝수행 + 짝수열/홀수열 , 홀수행 + 홀수열/짝수열 케이스로 나눠서 다 구했는데 예제 답안 중에 딱 하나만 안 됐었어 바로 이거
그래서 내 방법이 틀렸다는 걸 앙ㄹ게됐음
어떻게 해야하냐면 일단 첫 번째 정사각형이 흰색인 배열, 검은색인 2차원 배열을 만들어서 원본 입력된 배열과 비교해서 더 작은 차이를 가지는 값을 반환하면 된다 !
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
String[] word = new String[num];
//scanner.nextLine();
for(int i=0;i<num;i++) {
word[i] = br.readLine();
}
Arrays.sort(word, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length() == o2.length()) {
//단어 길이가 같으면 사전 순
return o1.compareTo(o2);
}
else return o1.length() - o2.length();
}
});
StringBuilder sb = new StringBuilder();
sb.append(word[0]).append('\n');
for(int i=1; i< num; i++) {
if(!word[i].equals(word[i-1])) {
sb.append(word[i]).append('\n');
}
}
System.out.println(sb);
//scanner.close();
}
}
완떠엉..
728x90
'알고리즘 > 백준' 카테고리의 다른 글
1436번 문제 : 영화감독 (0) | 2023.03.18 |
---|---|
1259번 문제 : 팰린드롬수 (0) | 2023.03.17 |
10250번 문제 : ACM호텔 (0) | 2023.03.13 |
10814번 문제 : 나이순 정렬 (0) | 2023.03.12 |
7568번 문제 : 덩치 (0) | 2023.03.11 |