Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- CPU스케줄링
- 폰켓몬
- 해시
- 운영체제
- 트리셋
- 프로젝트
- 코테
- 산업은행청년인턴
- 그래프탐색
- springboot
- 구현
- DB replication
- 백준
- findById
- 프로그래머스
- 산업은행it
- 파이널프로젝트
- 트리맵
- Spring JPA
- 컴퓨터구조
- 2178
- SpringBatch
- 스케일아웃
- CS
- JPA
- fatch
- flyway
- BFS
- 외래키제약조건위반
- 임베디드타입
Archives
- Today
- Total
나 JAVA 봐라
[백준] 1268번 임시 반장 정하기 본문
초반에는 입력값을 받을 때, ArrayList<Interger> arr[] = new ArrayList[10]; 과 같은 형식으로 받아서 temp[i]의 j에 해당하는 학생의 정보를 담으려고 했다.
근데 ArrayList와 배열을 함께 쓰는 방식이 익숙하지가 않고 아무리 봐도 적응되지 않아서 2차원 배열 + 3중 for문 방식으로 문제를 풀었다.
접근 방법
- 입력값은 그대로 input[N][5]의 2차원 배열에 넣기
- 배열을 학생 기준으로 순회하며 겹치는 횟수 count 하기
- 순회하기 위해 3중 for문이 사용된다.
- 1. 각각 i번째 학생 순회 (비교의 기준)
- 2. 함께 비교할 j번째 학생 : i==j 라면 continue; (-> 동일인물을 비교하면 안되기 때문)
- 3. i,j의 k학년 비교 : 두 학생이 한 번 같은 반 되었다면, 이 후에는 비교할 필요 없기에 break; 하여 반복문 탈출
- 순회하기 위해 3중 for문이 사용된다.
- 위와 같은 반복문을 통해 같은 반된 횟수의 최댓값과 해당 학생 번호를 구한 후 출력한다.
package yejin.song;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_임시반장 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 학생 수
int input[][] = new int[N][5]; // [i][j] = i학생의 j학년 때의 반
for (int i = 0; i< N; i++){
st = new StringTokenizer(br.readLine());
for (int j = 0; j< 5; j++){
input[i][j] = Integer.parseInt(st.nextToken());
}
}
int max = 0;
int student_num = 0;
for (int i = 0; i < N; i++){ // i번 학생에 대한 같은 반 횟수 count
// 안겹치게 하려면 학생 별로 쭉 비교하면서 cnt ++ 해줘야함 (중복 제거)
int cnt = 0; // 겹치는 횟수
for (int j = 0; j< N; j++){ // j학생 접근
if (i==j) continue; // 자기 자신을 비교 x
for (int k = 0; k < 5; k++){ // k학년 접근
if (input[i][k] == input[j][k]) { // 반이 같다면
cnt++;
break; //중복 카운트 안되기에 j학생과의 비교 종료
}
}
}
if (max < cnt){
max = cnt;
student_num = i; // 최종 출력 시 +1 해야함
}
}
System.out.println(student_num+1);
}
}
'코딩테스트 > 구현' 카테고리의 다른 글
[백준] 1834번 나머지와 몫이 같은 수 (0) | 2024.04.13 |
---|---|
[백준] 1357번 뒤집힌 덧셈 (0) | 2024.04.12 |
[백준] 1292번 쉽게 푸는 문제 (0) | 2024.04.09 |
[백준] 1236번 성지키기 (0) | 2024.03.28 |
[백준] 1157번 단어공부 (0) | 2024.03.28 |