내가 C로 코딩을 공부하는 이유는 임베디드 프로그래밍을 위해서다.
나중에 언어에 대한 이해 + 알고리즘에 대한 익숙함을 학습 결과물로 얻고싶다.
https://www.acmicpc.net/problem/2577
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
www.acmicpc.net
첫번쨰로 성공한 코드 ( 2시간 넘게 걸렸다.)
#include <iostream>
#include <math.h>
int main() {
int arr[10]={0}; // 맥시멈이 9자리다.
int A,B,C,D;
scanf("%d %d %d",&A,&B,&C);
D = A*B*C;
// 17037300
for(int i=0; i<10; i++)
{
int count;
count = 0; // 매번 0으로 둔다
double E = pow(10,(i+1)); //10 100 1000 10000.00
double F = pow(10,i); // 1.00 10.00 100.00
int G = E; // 정수형으로 변환
int H = F; // 정수형으로 변환
int P = D%G; // 연산순서를 위해서
count = P/H; // 해당자리의 숫자를 찾기 위함
arr[count]= arr[count]+1; // 그것을 맞는 칸에 넣어서 +1
D = D-P; // P/H는 500을 5로 만든거고, D-P를 해줘야 숫자가 넘어감
if(D==0)
break;
}
for(int i=0; i<10; i++)
{
printf("%d\n",arr[i]);
}
}
코딩을 처음 입문하는 사람들이 풀기 좋은 문제는 아니었다.
잘 몰라도 찾아보면서 풀면, 여러 개념을 가져갈 수 있는 문제였다.
배열에 관해서, ^ 연산자는 XOR을 의미한다는 것, pow 함수, 자료형, 자리수(degit) 를 생각하기 좋았다.
문제를 풀기 위해서 공부한 것들
pow 함수, 배열, 자료형, 자리에 있는 숫자 쉽게 계산하기
0. 애초에 pow 함수를 사용하지 않고도 풀 수 있었던 문제이다.
내가 이런 문제를 여러번 풀어봤다면 쉬웠겠지.
[자리수 응용에 대해서]
while (D > 0) {
int count = D % 10;
frequency[count]++;
D /= 10;
}
이런 간단한 방법으로 자리에 대한 것을 표현할 수 있다.
1. C#, C언어에서 ^ 연산자는 XOR을 의미한다.
2. 우리가 흔히 사용하는 제곱연산자는 pow(x, y); 이다. 반환도 double로 된다.
ex) 5^3 을 계산하기 원한다면 pow(5,3); 단, 125.00000 의 형태로 나오니까 정수형으로 쓰고싶다면
int 를 하나 더 사용하여서 자료형을 변환해주면 된다. ( 나는 그렇게 하였다. )
3
int arr[3] = {0, } 3칸짜리 배열을 모든 값을 0으로 초기화해준다.
arr[3] = 2; 2번째 칸에 숫자 2가 들어간다는 뜻
두번쨰로 사용한 코드 (현업자인 친구가 공부하라고 준 코드)
#include <stdio.h>
#include <iostream>
#include <math.h>
int main() {
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
int D = A * B * C;
int frequency[10] = {0,};
while (D > 0) {
int count = D % 10;
frequency[count]++;
D /= 10;
}
for (int i = 0; i < 10; i++) {
printf("%d\n", frequency[i]);
}
}
'백준 알고리즘 > 입문&기본 (브론즈)' 카테고리의 다른 글
백준 입문 문제추천 2908(C언어 풀이 및 응용) (0) | 2022.08.15 |
---|---|
백준 입문 문제추천 3046(풀이 및 응용) (0) | 2022.06.03 |
백준 입문 문제추천 2752 (풀이 및 응용) (0) | 2022.06.03 |
백준 입문 문제추천 1550 (풀이 및 응용) (0) | 2022.06.02 |