12번 멘토링 질문입니다!
416
投稿した質問数 1
안녕하세요, 12번 멘토링 문제 풀다가 첫 번째 채점 결과 값이 3으로 잘 나왔습니다. 그런데 그 다음 입력부터는 전부 오답이 나오는 상황인데, 어떤 부분에서 틀린 건지 알려주시면 감사하겠습니다 ㅠㅠ
// package = " ";
import java.io.*;
import java.util.*;
class Main
{
public int Solution(int n, int m, int arr[][]){
String mathMark = "";
ArrayList<Integer> ans = new ArrayList<>();
HashMap<String, Integer> countMap = new HashMap<>();
for(int i = 0; i < n; i++){ // 첫째부터 계속 다음 줄 내려가서 검사
for(int j = 0; j < m; j++){ //
for(int k = 0; k < m; k++){
// System.out.println("j값 : "+j+", "+"k값 : "+k);
if(j != k && j < k){
// System.out.println(arr[i][j]+", "+arr[i][k]);
if(i == n-1 && j == m-1 && k == m-1){
mathMark += arr[i][j]+""+arr[i][k];
}
else{
mathMark += arr[i][j]+""+arr[i][k]+" ";
}
}
}
}
}
/* m개 값을 가지고 있는 수 찾기 */
String numArray[] = mathMark.split(" ");
// 숫자 등장 횟수 카운트
for(int i = 0; i < numArray.length; i++){
countMap.put(numArray[i],countMap.getOrDefault(numArray[i],0) + 1);
}
// 등장 횟수가 3 이상인 숫자 Count
for(Map.Entry<String, Integer> entry : countMap.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
if(entry.getValue() == n){
ans.add(1);
}
}
return ans.size();
}
public static void main(String[] args) throws Exception{
Main m = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] numStr = br.readLine().split(" "); // 1. N과 M 입력받기
int column = Integer.parseInt(numStr[0]);
int raw = Integer.parseInt(numStr[1]);
int arr[][] = new int[raw][column];
for(int i = 0; i < raw; i++){
String[] test = br.readLine().split(" ");
for(int j = 0; j < column; j++){
arr[i][j] = Integer.parseInt(test[j]);
}
}
System.out.println(m.Solution(raw, column, arr));
br.close();
}
}
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
제공해주신 코드를 살펴본 결과, 몇 가지 주목할 점이 있습니다.
int column = Integer.parseInt(numStr[0]);와int raw = Integer.parseInt(numStr[1]);에서column과raw의 명명이 혼동될 수 있습니다. 일반적으로 행과 열을 의미하는 변수명으로n과m을 사용하는데, 여기서는n을 열(column)의 수,m을 행(row)의 수로 사용하고 있습니다.int arr[][] = new int[raw][column];에서 배열을 선언할 때 행과 열의 순서를 혼동하신 것 같습니다.조합을 만드는 로직에서
if(j != k && j < k)조건을 사용하고 있습니다. 이 조건은 정상적으로 중복 없이 두 번째와 세 번째 인덱스가 조합될 수 있도록 합니다. 하지만 문제 해결의 핵심은 조합의 결과가 아니라, 이러한 조합들이 각 테스트 케이스마다 어떻게 반복되는지, 그리고 그 반복 횟수를 기준으로 정답을 도출하는 것입니다.mathMark += arr[i][j]+""+arr[i][k]+" ";에서 조합된 문자열을 하나의 문자열로 누적하고 있습니다. 이후String numArray[] = mathMark.split(" ");으로 분리하여 각 조합의 등장 횟수를 세고 있습니다.if(entry.getValue() == n){조건에서 등장 횟수가n과 같은 경우만 카운트하고 있습니다. ‘n’이 아닌 ’m’(행의 개수)과 비교해야 정상적으로 동작할 것입니다.문제 해결의 핵심은 특정 조건을 만족하는 조합의 개수를 찾는 것인데, 주어진 코드는 조합을 만들고 이후 해당 조합의 등장 횟수를 통해 문제를 해결하려고 하고 있습니다. 주어진 문제에서 요구하는 조건에 맞게 로직을 다시 한 번 검토해보세요.
마지막으로, 입력 받는 부분에서
int raw = Integer.parseInt(numStr[1]); int arr[][] = new int[raw][column];처럼 배열을 선언하는 부분에서의 행과 열의 개념이 혼동되는 부분을 수정하세요.int n = Integer.parseInt(numStr[0]); int m = Integer.parseInt(numStr[1]);그리고int arr[][] = new int[n][m];와 같이 수정하는 것이 좋겠습니다.
이 포인트들을 고려하여 코드를 다시 한 번 확인해 보시기 바랍니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
19
1
갑자기 채점 사이트가 바뀌었어요
0
19
1
문제 리스트 페이지
0
22
1
채점 사이트 관련 질문드립니다
0
20
1
봉우리 문제 질문입니다
0
78
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
62
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
70
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
83
2
6-7 강의에서
0
47
1
6-6. 장난꾸러기 질문 있습니다.
0
43
1
강의 수강후 코딩테스트
0
106
1
answer 변수 사용 여부
0
42
1
2중 for문
1
83
2
2-11. 임시반장정하기 (Runtime Error)
0
62
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
68
1
이런 풀이는 어떨까요
0
42
1
자바 스트림 방식의 효율성 질문 드립니다.
0
55
1
알고리즘 자료 구조들..
0
60
1
StringBuilder vs BufferdWriter
0
47
1
원더랜드(프림)
0
47
1
이런 코드는 어떤가요?
0
59
1
bfs 풀이
0
55
1
병합정렬
0
55
1

