찹모찌의 기록일지
단계별로 풀어보기 4단계: 1차원 배열 본문
네 1차원 배열 단계를 풀어봤습니다.
언어로 C++를 사용했기 때문에 vector를 주로 사용해서 풀게 되었습니다.
기억에 남는 문제를 소개해드리도록 하겠습니다.
- 백준:2577 숫자의 개수
https://www.acmicpc.net/problem/2577
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
www.acmicpc.net
자연수 세 개를 곱한 값의 각 자리의 자연수의 개수를 세는 문제입니다. 여기서 중요한 점은 정수를 문자열로 변환하여 각 자리의 숫자를 카운팅하는 부분이 되겠네요.
여기서 처음에 itoa를 사용하여 숫자를 문자열로 변환하려고 했었습니다. 하지만 찾아보니 itoa는 비표준 함수라 실행이 안되었습니다.
따라서 sprintf문을 사용하여 변환해야 했습니다.
#include <iostream>
using namespace std;
int main(void)
{
int a, b, c;
char str[100];
int count[10] = { 0, };
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
int result = a * b * c;
sprintf(str, "%d", result);
for (int i = 0; str[i] != '\0'; i++)
{
count[str[i]-'0']++;
}
for (int i = 0; i < 10; i++)
{
printf("%d\n", count[i]);
}
return 0;
}
보면 문자열 str에 sprintf를 통해 정수 result의 값을 write해주는 모습입니다.
또한 count를 하기 위해 문자열의 위치, 즉 정수의 값을 찾을 때 '0'의 값을 빼주어 char 형을 int 형으로 변환하는 모습입니다.
새로운 방법들을 많이 알아가는 문제였습니다.
- 백준: 4344 평균은 넘겠지
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
1차원 배열 카테고리에서 제일 어려웠던 문제가 아닌가 싶습니다.
1차원 배열이라기보다는 2차원 배열에 가까웠던 문제라고 생각이 들긴 하는데, 아무튼 1차원 배열 문제라니 그렇다고 합시다.
예제 입력에서 알 수 있다시피 첫 줄에 입력 받을 반의 개수, 둘째 줄부터 인원수, 각 인원에 해당하는 점수로 되어있는데
각 배열의 첫 항목이 인원 수가 된다는 점을 기억하고 있어야 한다.
그 뒤 부터는 각 반의 평균, 평균을 넘는 학생의 수, 비율 등을 계산하여야 하므로 복잡한 문제라고 볼 수 있다.
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
int n;
scanf("%d", &n);
vector<vector<int>> v;
vector<int> average;
float avg;
float per;
int nn;
int nnn;
for (int i = 0; i < n; i++)
{
scanf("%d", &nn);
vector<int> vv;
vv.push_back(nn);
int sum = 0;
for (int j = 0; j < nn; j++)
{
scanf("%d", &nnn);
vv.push_back(nnn);
sum += nnn;
}
avg = sum / vv[0];
average.push_back(avg);
v.push_back(vv);
}
int count = 0;
for (int i = 0; i < average.size(); i++)
{
for (int j = 1; j < v[i].size(); j++)
{
if (average[i] < v[i][j])
count++;
}
printf("%.3f%%\n", (float)((float)count*100 / (float)v[i][0]));
count = 0;
}
return 0;
}
코드 길이에서 알 수 있듯 복잡한 문제였습니다. 정답을 내는 과정에서 float로 변환을 해줘야 정답이 나올 수 있어 더욱 귀찮았던 문제였습니다.
1차원 배열까지 풀며 슬슬 머리가 아파지기 시작했습니다.
다음이 기대가 되네요.
'알고리즘' 카테고리의 다른 글
단계별로 풀어보기 3단계: 반복문 (0) | 2022.07.07 |
---|---|
단계별로 풀어보기 2단계: 조건문 (0) | 2022.07.01 |
단계별로 풀어보기 1단계: 입출력과 사칙연산 (0) | 2022.07.01 |
안녕하세요. 찹모찌입니다. 알고리즘 공부를 시작할 계획입니다. (0) | 2022.06.30 |