본문 바로가기

백준/단계별47

백준 1157 C#) 단어 공부 주어진 단어에서 대소문자를 구별하지 않고 알파벳을 세는 문제이다. int[] cnt = new int[26]; int max = 0; int idx = 0; bool isDup = false; string s = Console.ReadLine(); //대소문자 처리 foreach (char c in s) { if (c >= 'a') cnt[c - 'a']++; else cnt[c - 'A']++; } //중복 검사 for (int i = 0; i max) { max = cnt[i]; idx = i; isDup = false; } else if (cnt[i] == max) { isDup = true; } } Console.Write(!isDup ? (char).. 2022. 4. 22.
백준 11720 C#) 숫자의 합 주어진 수의 자릿수를 모두 더하는 문제인데 입력의 크기가 예사롭지 않다. int n = int.Parse(Console.ReadLine()); int sum = 0; while (n-- > 0) { sum += Console.Read() - '0'; } Console.Write(sum); Console.Read로 한 문자씩 읽어오면서 더해주면 된다. 길이가 주어졌기 때문에 어렵지 않게 가능하다. 2022. 4. 21.
백준 4673 C#) 셀프 넘버 이전에도 주어진 수의 각 자릿수를 더하는 문제가 나왔었다. 이번엔 함수 단계인 만큼 함수를 통해 구현해보자. int d(int n) { int dn = n; while (n != 0) { dn += n % 10; n /= 10; } return dn; } //Main StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput())); bool[] flags = new bool[10001]; int dn; for (int n = 1; n < 10001; n++) { dn = d(n); if (dn < 10001) flags[dn] = true; if (!flags[n]) sw.WriteLine(n); } sw.Close(); 함수 d는 생성자.. 2022. 4. 19.
백준 4344 C#) 평균은 넘겠지 문제 자체는 어렵지 않지만 출력 형식이 소수점을 포함한 퍼센테이지로 지정되어 있다. int c = int.Parse(Console.ReadLine()); int[] scores; double avg; int cnt; while (c-- > 0) { scores = Array.ConvertAll(Console.ReadLine().Split()[1..], int.Parse); avg = scores.Average(); cnt = scores.Count(score => score > avg); Console.WriteLine("{0:F3}%", (double)cnt / scores.Length * 100); } 함수나 메소드들을 잘 활용하면 비교적 간결하고 직관적인 코드를 작성할 수 있다. 위 코드를 보면 메.. 2022. 4. 18.
백준 2577 C#) 숫자의 개수 주어진 수에서 각 자릿수를 뽑아내는 방법은 다양하다. //A x B x C 의 결과를 구하는 작업 int num = 1; for (int i = 0; i < 3; i++) { num *= int.Parse(Console.ReadLine()); } //각 자릿수를 뽑아내는 작업 int[] counts = new int[10]; while (num != 0) { counts[num % 10]++; num /= 10; } //출력 foreach (int count in counts) { Console.WriteLine(count); } 주어진 수에서 1의 자릿수를 뽑아낸 후 10으로 나누어 다음 자릿수인 10의 자릿수가 1의 자릿수로 이동하도록 하였다. 이를 반복하면 모든 자릿수를 구할 수 있다. 다른 방법으.. 2022. 4. 18.
백준 10818 C#) 최소, 최대 원소의 개수가 많긴 하나 시간 초과가 발생하는 문제는 아니다. int n = int.Parse(Console.ReadLine()), min, max; int[] nums = Array.ConvertAll(Console.ReadLine().Split(), int.Parse); //1 min = max = nums[0]; for (int i = 1; i max) max = nums[i]; } Console.Write(min + " " + max); //2 min = 1000000; max = -1000000; foreach (int num in nums) { if (num < min) min .. 2022. 4. 18.
백준 1110 C#) 더하기 사이클 문제가 잘 이해되지 않는다면 예제를 살펴봐야 한다. 주어진 수가 10보다 작다면 10을 곱하라고 했는데, 그렇다면 원래 수는 10을 곱하기 전의 수가 되는 것인가? 그렇지 않다. 예제 3을 보면 1이 입력되는데 원래 수가 1일 경우에는 사이클의 길이가 60이 아닌 1이 된다. (1 + 0 = 1 이므로 한번에 원래 수 1이 나온다.) 따라서 원래 수 또한 10이 곱해진 수가 되어야 한다. 그리고 계산 도중 10보다 작은 수가 나왔다고 해서 10을 곱해줄 필요는 없다. 이는 처음 주어진 수에만 해당되는 조건이다. int n = int.Parse(Console.ReadLine()); if (n < 10) n *= 10; int temp = n, cnt = 0; do { temp = ((temp % 10) *.. 2022. 4. 18.
백준 10951 C#) A+B - 4 더 이상 입력이 존재하지 않을 때를 식으로 표현할 수 있어야 한다. StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput())); string s1; string[] s2; while ((s1 = Console.ReadLine()) != null) { s2 = s1.Split(); sw.WriteLine(int.Parse(s2[0]) + int.Parse(s2[1])); } sw.Close(); Console.ReadLine()이 null이 될 때가 바로 입력이 존재하지 않을 때이다. 2022. 4. 18.