[백준] 1268 - 임시 반장 정하기
[백준] 1268 - 임시 반장 정하기

[백준] 1268 - 임시 반장 정하기

언어
Python
C
난이도
Sliver 5
다시 풀어보기
다시 풀어보기
알고리즘 유형
작성자
박용성박용성
생성 일시
2024년 10월 07일

🖥️ 시작하며

그냥 구현 문제.
 
‘한 번이라도’ 같은 반이었는지 확인하는 것이 관건이다. 즉, break 를 줘야 한다.
 
와.. C언어에서 president 를 0으로 설정했다가 삽질했다. 만약 student_counts 가 모두 0이라면 0을 출력하기 때문에 오류인 걸로..

⚙️ 코드

import sys input = sys.stdin.readline def solution(N, student): student_count = [0 for _ in range(N)] for i in range(N): # N번 학생에 대해 반복 # 두 학생이 1학년부터 5학년까지 중 한 번이라도 같은 반이었는지 확인 for j in range(i + 1, N): if any(student[i][grade] == student[j][grade] for grade in range(5)): student_count[i] += 1 student_count[j] += 1 return student_count.index(max(student_count)) + 1 if __name__ == "__main__": N = int(input()) student = [] for _ in range(N): student.append(list(map(int, input().split()))) print(solution(N, student))
#include <stdio.h> #include <stdlib.h> #define MAX_STUDENTS 1000 #define GRADES 5 int students[MAX_STUDENTS][GRADES]; int student_counts[MAX_STUDENTS] = {0}; // 가장 많은 학생과 같은 반이었던 학생을 찾는 함수 int solution(int N) { int max_count = 0; int president = 1; for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { // 두 학생이 같은 반이었는지 확인 for (int grade = 0; grade < GRADES; grade++) { if (students[i][grade] == students[j][grade]) { // 같은 반이었다면 두 학생의 카운트를 증가 student_counts[i]++; student_counts[j]++; break; } } } } // 가장 많은 학생과 같은 반이었던 학생 찾기 for (int i = 0; i < N; i++) { if (student_counts[i] > max_count) { max_count = student_counts[i]; president = i + 1; // 학생 번호는 1부터 시작 } } return president; } int main() { int N; scanf("%d", &N); for (int i = 0; i < N; i++) { for (int j = 0; j < GRADES; j++) { scanf("%d", &students[i][j]); } } int result = solution(N); printf("%d\n", result); return 0; }

📌 소감

댓글

guest