본문 바로가기

전체 글98

백준 1316 C#) 그룹 단어 체커 문제는 간단하다. 같은 알파벳은 반드시 붙어있어야 한다는 것이다. int n = int.Parse(Console.ReadLine()); int cnt = 0; string s; while (n-- > 0) { s = Console.ReadLine(); cnt++; for (int i = 0; i 1) { cnt--; break; } } } Console.Write(cnt); 내 아이디어는 이러하다. 문자열 "aaabbaa"에서 a를 검사한다고 치자. 그럼 현재 a와 제일 가까운 다음 a의 인덱스 차이를 구할 수 있을 것이다. 이때 그 차이가 1이라면 a는 서로 붙어 있다는 뜻이 되지만 1보다 크다면 그렇지.. 2022. 4. 27.
백준 2941 C#) 크로아티아 알파벳 다른 문자열은 괜찮은데 dz=가 조금 골치아프다. int cnt = 0; bool flag = false; string s = Console.ReadLine(); for (int i = 0; i < s.Length; i++) { if (i + 1 < s.Length) { switch ((s[i], s[i + 1])) { case ('c', '='): case ('c', '-'): case ('d', '-'): case ('l', 'j'): case ('n', 'j'): case ('s', '='): continue; case ('d', 'z'): flag = true; continue; case ('z', '='): if (flag) flag = false; continue; } } cnt++; if (.. 2022. 4. 27.
백준 1152 C#) 단어의 개수 이 문제를 푸는 아이디어는 간단하다. 커서가 문자열을 훑는다고 할 때, 공백에서 문자로 넘어가는 그 타이밍에만 셈하면 된다. int cnt = 0; bool flag = true; string s = Console.ReadLine(); foreach (char c in s) { //공백에 이어 문자가 나왔는가 if (flag && c != ' ') cnt++; //공백이 나왔는가 flag = (c == ' '); } Console.Write(cnt); 정답률이 상당히 낮은 문제지만 코드는 전혀 복잡하지 않다. 오히려 그 타이밍만 잘 캐치할 수 있다면 공백이 한 개가 아닌 열 개가 연속으로 나와도 문제를 해결할 수 있다. 포인트라고 할 부분은 없지만 굳이 꼽자면 flag의 초기값을 true로 설정하는 것 .. 2022. 4. 22.
백준 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.