OnlineJudge
cote.inflearn.com
자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의
자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성
www.inflearn.com
package 인프런.멘토링_12;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
//n : studentNum
//m : testNum;
public int solution2(int studentNum, int testNum, int[][] arr){ //인프런코드
int answer=0;
int rankNum = studentNum;
for(int mentor=1; mentor<=studentNum; mentor++){
for(int menti=1; menti<=studentNum; menti++){
int cnt=0;
for(int tNum=0; tNum<testNum; tNum++){
int mentorRank=0, mentiRank=0;
for(int rNum=0; rNum<rankNum; rNum++){
if(arr[tNum][rNum]==mentor) mentorRank=rNum;
if(arr[tNum][rNum]==menti) mentiRank=rNum;
}
if(mentorRank<mentiRank) cnt++;
}
if(cnt==testNum){
answer++;
//System.out.println(i+" "+j);
}
}
}
return answer;
}
public int solution (int studentNum, int testNum, int[][] arrayForMentoring) {// 내 코드
int rank = studentNum;
int answer = 0;
for(int student = 1; student <= studentNum; student++) {
String tmp="";
HashSet<Integer> availablePair = new HashSet<>();
for (int tNum = 0; tNum < testNum; tNum++) {
boolean target = false;
for (int rNum = 0; rNum < rank; rNum++) {
if(target==false){
if(availablePair.contains(arrayForMentoring[tNum][rNum])) availablePair.remove(arrayForMentoring[tNum][rNum]);
}
if(arrayForMentoring[tNum][rNum]==student){
target = true;
continue;
}
if (target && tNum==0) availablePair.add(arrayForMentoring[tNum][rNum]);
}
if(availablePair.size()==0) break;
}
answer+=availablePair.size();
// System.out.println("k = " + k + " cnt = " + cnt);
}
// System.out.println("최대 경우의 수 : " + answer);
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int studentNum = kb.nextInt();
int testNum = kb.nextInt();
int[][] arrayForMentoring = new int[testNum][studentNum];
for (int i = 0; i < testNum; i++) {
for (int j = 0; j < studentNum; j++) {
arrayForMentoring[i][j] = kb.nextInt();
}
}
System.out.println(T.solution(studentNum,testNum,arrayForMentoring));
}
}
나는 해당 학생의 등수의 위치를 기억해서 HashSet에 추가하거나 제거해가며 경우의 수를 찾는 방법으로 값을 구했다.
'2022 > 코딩테스트' 카테고리의 다른 글
인프런 코딩테스트 강의 메모 - 유효한 팰린드롬 (0) | 2022.07.20 |
---|---|
인프런 코딩테스트 강의 메모 - 회문문자열 (0) | 2022.07.14 |
인프런 코딩테스트 강의 메모 - 단어뒤집기 (0) | 2022.07.08 |
인프런 코딩테스트 강의 메모 - 대소문자변환 (0) | 2022.07.07 |