SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
(오답)
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int test_case = 1; test_case<=T; test_case++){
int N = sc.nextInt();
int K = sc.nextInt();
int count =0;
String[][] arr1 = new String[N][N];
String[][] arr2 = new String[N][N];
String check1="";
String check2="";
String[] answer = new String[1];
answer[0] = "";
for(int num =0; num<K; num++){ // 1의 개수 설정
answer[0] += "1";
}
for(int i=0; i<N; i++){ // 2차원 배열에 가로, 세로 뒤집힌 버전으로 1, 2 설정
for(int j=0; j<N; j++){
arr1[i][j] = sc.next();
arr2[j][i] = arr1[i][j];
}
}
for(int k=0; k<N; k++){
check1 = ""; // check1, check2를 공백으로 설정
check2 = "";
for(int l=0; l<N; l++){
check1+= arr1[k][l]; // check1, 2에 가로-세로 따로 1열씩 입력 ex) 첫번째의 경우 가로 1열, 세로 1열 입력됨, 0부터 N-1번째까지 다 입력됨
check2+= arr2[k][l];
}
String[] ex1 = check1.split("0"); // 이 이하, 입력된 한줄을 체크해서 0 사이 1의 개수 split으로 추출
String[] ex2 = check2.split("0");
for(int a = 0; a<ex1.length; a++){ // split 0으로 나눠진 배열의 개수만큼 체크
if(ex1[a]==answer[0])
count++;
}
for(int b = 0; b<ex2.length; b++){
if(ex2[b]==answer[0])
count++;
}
}
Sysetm.out.println("#" + test_case + " " + count);
}
}
}
1. 문자열 비교할때는 주솟값이 다르게 불러와지기때문에 if문으로 같냐고하면 풀 수 없다 그거 모르고 왜 배열끼리 비교하라고 하지? answer을 배열로 선언한 이유였고, 도대체 뭐가 문제지 하면서 따로 창 켜서 if문 돌려보면서 이건 true로 나오고 이건 false로 나오는데 이유가 뭐지 하면서 다시 했다.
해결법 > 비교함수, 예시로 a.equlas(b) 사용하면 된다.
2. 다시 보니 arr1, 2 따로 받을 필요 없고 발상을 했으니 정상구조 1개만 생성하고 그걸 세로로 가로로 따로 받아서 문자열 만들면 됨
(정답)
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int test_case = 1; test_case<=T; test_case++){
int N = sc.nextInt();
int K = sc.nextInt();
int count =0;
String[][] arr1 = new String[N][N];
String check1="";
String check2="";
String answer = "";
for(int num =0; num<K; num++){ // 1의 개수 설정
answer += "1";
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
arr1[i][j] = sc.next();
}
}
for(int k=0; k<N; k++){
check1 = ""; // check1, check2를 공백으로 설정
check2 = "";
for(int l=0; l<N; l++){
check1+= arr1[k][l]; // check1, 2에 가로-세로 따로 1열씩 입력 ex) 첫번째의 경우 가로 1열, 세로 1열 입력됨, 0부터 N-1번째까지 다 입력됨
check2+= arr1[l][k];
}
String[] ex1 = check1.split("0"); // 이 이하, 입력된 한줄을 체크해서 0 사이 1의 개수 split으로 추출
String[] ex2 = check2.split("0");
for(int a = 0; a<ex1.length; a++){ // split 0으로 나눠진 배열의 개수만큼 체크
if(ex1[a].equals(answer))
count++;
}
for(int b = 0; b<ex2.length; b++){
if(ex2[b].equals(answer))
count++;
}
}
System.out.println("#" + test_case + " " + count);
}
}
}
쉽고 오래 걸릴 문제가 아니었지만 어이가 없이 오래 걸려서 아마 잊지 않을 것..
'SWEA' 카테고리의 다른 글
[SWEA] 증가하는 사탕 수열 (0) | 2024.10.25 |
---|---|
[SWEA] 공평한 분배 2 (0) | 2024.10.25 |
[SWEA] 백만 장자 프로젝트 (+오답) (0) | 2024.10.13 |
[SWEA] 최빈수 구하기 (0) | 2024.10.10 |
[SWEA] 수도 요금 경쟁 (0) | 2024.10.10 |