일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스파르타내배캠til
- 스파르타내일배움캠프
- 백준
- Input Field
- 알아볼것
- Til
- 오블완
- input system
- projectl
- 내주말
- 스파르타내일배움캠프TIL
- 스파르타부트캠프
- 유니티
- 내일배움캠프
- 스파르타
- 최종프로젝트
- 스탠다드
- 코딩테스트
- Action
- 티스토리챌린지
- 분반별
- string배열과 char
- 텍스트게임
- 분반별학습
- 코테
- 코테풀기
- 피셔예이츠
- 마크다운
- 내배캠
- 프로그래머스
- Today
- Total
Ottoman
BAEKJUN 1302번 [C#] 베스트셀러 본문
solved.ac.SILVER 4
베스트셀러
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
생각
// 입력한 값을 검색해서 몇개인지 알아야함
// 딕셔너리를 만들고
// 저장하려는 키값이 없다면 저장, 값(카운트)를 1로 올린다.
// 저장하려는 키값이 있다면 키에 접근해서 카운트를 1올린다.
Max도 기록해서 Max값을 가진 키의 string을 출력한다.
같은 Max가 있다면 조건문을 통해 알파벳으로 앞서는 string을 출력한다.
제출코드
public class CodingTest
{
public static void Main()
{
Console.WriteLine(BestSeller());
string BestSeller()
{
// 입력부
string strSell = Console.ReadLine();
int iSell = int.Parse(strSell);
Dictionary<string, int> sellDictionary = new Dictionary<string, int>();
for ( int i = 0; i < iSell; ++i )
{
string bookName = Console.ReadLine();
if(!sellDictionary.ContainsKey(bookName) )
{
sellDictionary.Add( bookName, 1 );
}
else
{
sellDictionary[bookName]++;
}
}
int max = -1;
string bestSeller = "Z";
foreach ( var book in sellDictionary)
{
// 값이 max보다 크다면 string을 새 리스트에 저장해둔다.
if (max < book.Value)
{
max = book.Value;
bestSeller = book.Key;
}
// 값이 같다면 스트링검사
else if (max == book.Value && CompareString(book.Key, bestSeller) )
{
bestSeller = book.Key;
}
}
// true면 str1이 사전순 앞, false면 str2가 사전순 앞
bool CompareString(string str1, string str2)
{
if (str1 == str2) return true;
int minLength = Math.Min(str1.Length, str2.Length);
for (int i = 0; i < minLength; ++i)
{
if (str1[i] < str2[i])
{
return true;
}
else if (str1[i] > str2[i])
{
return false;
}
}
return str1.Length < str2.Length;
}
return bestSeller;
}
}
}
소감
런타임 에러 (Argument) , 런타임 에러 (Segfault)
지워야할 코드를 그대로 제출해서 에러, bestSeller가 초기화를 안해서 null 에러. bestSeller에 "Z'라는 값을 초기화해서 넘어갔다.
Dictionary부분은 빠르게 끝냈는데 베스트셀러를 고르는 부분에서 버벅였다.
사전순 선택 때문에 스트링 검사도 만들었다.
Dictionary에서 최대값을 찾는 Linq가 있는것 같던데 그건 다음 기회에 사용해보겠다.
참고링크
[C#] 딕셔너리(Dictionary) 완벽 사용법 (tistory.com)
[C#] 딕셔너리(Dictionary) 완벽 사용법
딕셔너리(Dictionary) 완벽 사용법 딕셔너리(Dictionary)는 키와 값 쌍을 저장하는 자료구조이며 이번에는 C#에서 딕셔너리(Dictionary)를 사용하는 방법에 대해 알아봅니다. 1. 딕셔너리(Dictionary) 생성 C#
malemoonrabbit.tistory.com
[C#]Dictionary 데이터 추가하는 방법 (tistory.com)
[C#]Dictionary 데이터 추가하는 방법
Dictionary 데이터 추가하는 방법 C#의 Dictionary 클래스는 형식의 데이터를 가지는 컬렉션입니다. Dictionary에 데이터를 추가하는 방법을 살펴보기 전에 Dictionary의 특징을 이해할 필요가 있습니다. - Di
developer-talk.tistory.com
'코테풀기' 카테고리의 다른 글
두 원의 위치관계 (0) | 2024.10.01 |
---|---|
등차수열 (0) | 2024.09.25 |
BAEKJUN 11047번 [C#] 동전 0 그리고 DateTime (1) | 2024.05.25 |
BAEKJUN 1094번 [C#] 막대기 (0) | 2024.05.17 |
BAEKJUN 1085번 [C#] 직사각형에서 탈출 (0) | 2024.05.12 |