일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 이진 탐색
- 브루트포스 알고리즘
- 스택
- 잴다의 전설 티어스 오브 더 킹덤
- 빅오 표기법
- 마인크래프트
- 큐
- 코딩테스트
- 택시 기하학
- unity engine
- c#
- 그리디 알고리즘
- windows 12
- 자료구조
- i자형 인재
- 라자냐
- 닌텐도 스위치 2
- 시작
- 영어
- 그래픽 디자인
- 우선순위 큐
- T자형 인재
- 2025 대한민국 채용박람회
- 카니발대학교 공대강국
- 다이나믹프로그래밍
- blender
- 배열 리스트
- vrm posing desktop
- VRoid Studio
- VPS
Archives
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 10825번 국영수 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 10825
- 문제명: 국영수
- 언어: C#
- 분류: 정렬
- 비고:
문제
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
입력
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.
출력
문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.
풀이
var는 가변적으로 값을 입력받으며 다양한 형태가 섞인 입력을 처리할 수 있다. 문자열로 입력을 받고 공백으로 구분해서 학생 성적 클래스의 변수에 값을 대입한다,.
ThenBy()는 앞에서 정렬한 항목의 내용이 같을 때 뒤의 항목 내용을 오름차순으로 정렬한다.
ThenByDescending()은 앞에서 정렬한 항목의 내용이 같을 때 뒤의 항목 내용을 내림차순으로 정렬한다.
using System.Data;
class VowelNumber
{
static void Main(String[] args)
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 학생 수 입력
int n = Convert.ToInt32(sr.ReadLine());
// 학생 성적 클래스 선언
StudentResult[] studentResult;
// 학생 수만큼 클래스 생성
studentResult = new StudentResult[n];
for (int i = 0; i < n; i++)
{
// 공백으로 구분해서 이름, 국어 점수, 영어 점수, 수학 점수를 입력받는다.
var input = sr.ReadLine().Split();
// 학생 성적 클래스에 이름, 국어 점수, 영어 점수, 수학 점수를 저장한다.
studentResult[i] = new StudentResult(input[0], Convert.ToInt32(input[1]),
Convert.ToInt32(input[2]), Convert.ToInt32(input[3]));
}
// 학생 성적을 정렬한다.
// 1. 국어 점수는 내림차순
// 2. 국어 점수가 같으면 영어 점수는 오름차순
// 3. 국어 점수와 영어 점수가 같으면 수학 점수는 내림차순
// 4. 모든 점수가 같으면 이름을 오름차순 정렬
// 5. 아스키 코드에서 대문자는 소문자보다 작기에 더 앞에 온다.
studentResult = studentResult.OrderByDescending(n => n.Kor).ThenBy(n => n.Eng)
.ThenByDescending(n => n.Math).ThenBy(n => n.Name)
.ThenBy(n => Convert.ToInt32(n.Name[0])).ToArray();
// 학생의 이름 출력
for (int i = 0; i < n; i++)
sw.WriteLine(studentResult[i].Name);
sr.Close();
sw.Close();
}
}
class StudentResult
{
string name; // 이름
public string Name
{ get { return name; } }
int kor; // 국어 점수
public int Kor
{ get { return kor; } }
int eng; // 영어 점수
public int Eng
{ get { return eng; } }
int math; // 수학 점수
public int Math
{ get { return math; }}
// 이름, 국어 점수, 영어 점수, 수학 점수를 입력받았을 때
public StudentResult(string name, int kor, int eng, int math)
{
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
}
후기
이번에는 학생 이름과 3과목 점수가 담긴 별도의 클래스를 만들어서 해 보았다. 별도의 클래스 제작은 블로그 개설한 날로부터 이게 처음이다. 풀고 나니까 ThenBy()와 ThenBydescending()을 알았다면 금방 해결했을 문제이기도 했다. 변수가 다양하다면 클래스를 선언하거나 DataTable을 사용하는 것이 좋다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 2720번 세탁소 사장 동혁 C# (1) | 2025.05.11 |
---|---|
백준알고리즘 1436번 영화감독 숌 C# (0) | 2025.05.10 |
백준알고리즘 10987번 모음의 개수 C# (0) | 2025.05.07 |
백준알고리즘 31403번 A + B - C C# (0) | 2025.05.07 |
백준알고리즘 10808번 알파벳 개수 C# (0) | 2025.05.07 |