반응형
백준 단계별로 풀어보기 5단계 1차원배열 3번문제
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
www.acmicpc.net
문제의 핵심
1. 문자열과 정수형을 오갈 수 있는가?
2. 각 숫자의 갯수를 담당하는 배열 생성하기
문제는 그렇다치더라도 정답을 출력하는 방식이 독특하다.
0 ~ 9까지 해당하는 숫자가 총 몇개가 존재하는 지를
한줄에 하나씩 출력하는 것이다.
따라서, 길이가 10인 배열을 생성하고,
배열의 각 원소가 숫자를 하나씩 담당하여 몇개가 존재하는지를 저장하면 된다.
그리고나서 for문을 돌려서 배열의 원소값을 하나씩 출력하면 된다.
계산값을 string으로 변환해서 string의 길이만큼 for문을 돌려주고
문자열의 각 요소를 0~9까지 숫자 중 무엇과 일치하는지를 찾아내면 된다.
한마디로 이중for문을 사용하면 된다는 뜻이다.
이 아이디어를 떠올렸다면 금방 해결 할 수 있지만,
이 생각을 못하면 한참을 고민하게 될 수도 있는 문제이다.
그리고 문제를 풀다보면
Char형태를 int형태로 변환해줘야하는 상황이 발생하는데,
int.Parse로는 string만 변환할 수 있다.
char형태는 다음과 같은 방식으로 int형태로 바꿀 수 있다.
(int)Char.GetNumericValue()
정답 코드
using System;
using static System.Console;
namespace _1차원배열3
{
class Program
{
static void Main(string[] args)
{
// 3가지 자연수를 각각 입력 받는다.
string a = ReadLine();
string b = ReadLine();
string c = ReadLine();
// 입력된 숫자들의 곱한 결과를 num에 저장한다.
int num = int.Parse(a) * int.Parse(b) * int.Parse(c);
// num을 문자열로 변환한 tmep 생성
string temp = num.ToString();
// 정답을 출력할 길이가 10인 answer 배열 생성
int[] answer = new int[10];
// 이중 for문을 사용해서 num의 숫자를 체크한다
for (int i = 0; i < temp.Length; i++)
{
// 숫자 0부터 9까지 체크한다.
for (int j = 0; j < 10; j++)
{
// temp의 각 자리수의 숫자가 0~9까지 중 무슨 숫자인지 검사
if ((int)Char.GetNumericValue(temp[i]) == j)
{
// 일치하는 숫자가 있다면 해당 숫자의 개수를 저장하는 배열을 증가시킴.
answer[j]++;
}
}
}
// 정답 출력
for (int i = 0; i < answer.Length; i++)
{
WriteLine(answer[i]);
}
}
}
}
반응형
'C# > C# : Baekjoon' 카테고리의 다른 글
[백준] C# : 평균 (1546번) (0) | 2021.07.29 |
---|---|
[백준] C# : 나머지 (3052번) (0) | 2021.07.29 |
[백준] C# : 최댓값 (2562번) (0) | 2021.07.27 |
[백준] C# : 최소, 최대 (10818번) (0) | 2021.07.26 |
[백준 - 그리디 알고리즘 ] C# : 세탁소 사장 동혁 (2720번) (0) | 2021.07.23 |
댓글