백준 10807번 개수 세기 문제
입력되는 정수의 개수 : 1개부터 100개까지 (1<= N =< 100)
입력되는 정수의 범위 : -100부터 100까지 (-100 <= v =< 100)
자연수가 아니라 정수 v가 -100부터 시작되는 값이어서 어떻게하지 하면서
문제를 보고 초반에는 약간 헤맸는데
다행히 정수 v의 범위가 자연수에 - 부호를 붙여주면 값은 동일하다고 판단해서
자연수 범위의 배열과 마이너스 일때 배열을 따로 추가해서 관리해보았다
입력한 정수의 값이 0보다 큰 경우, arr_plus에 증감연산자를 사용해서
특정 정수를 만날때마다 그 배열의 인덱스를 증가시켜 횟수를 적립시켰다
마찬가지로 0보다 작은 경우, arr_minus에 저장해서 관리함
사용배열 : arr_plus[100], arr_minus[100]
//수도코드
arr_plus[100] = 0;
arr_minus[100] = 0
int input,v;
cin >> input;
for(int i=0; i<input; i++){
if(i>0) arr_plus[i]++;
else arr_minus[-i]++;
}
cin >> v;
if (v>=0) cout << arr_plus[v];
else cout << arr_minus[-v];
대충 이렇게 작성해보았는데
그냥 후루룩 쓰다보니 간과했던게 배열의 범위를 100개가 아닌 101로 주었어야 했음
마이너스 값의 경우 상관없지만, 0부터 100까지의 값을 저장해주어야 하는
arr_plus에서 범위가 초과하는 문제가 생긴다
그래서 2번 틀렸다가 겨우 알아냄..
그렇게 초안에서 다듬고 틀린부분을 수정한 완성본이 아래의 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
int cnt,v;
int arr_plus[101] = {0};
int arr_minus[101] = {0};
cin >> cnt;
int tmp;
for(int i=0; i<cnt; i++){
cin >> tmp;
if(tmp >=0){
arr_plus[tmp]++;
}
else{
arr_minus[-tmp]++;
}
}
cin >> v;
v>=0 ? cout << arr_plus[v] : cout << arr_minus[-v];
return 0;
}
cnt : 맨 처음 입력인 입력할 정수의 개수
tmp : 입력받을 정수들
v : 찾을 정수
arr_plus[101] = 입력받은 tmp 중 0부터 100까지의 정수의 횟수를 저장할 배열
arr_minus[101] = 입력받은 tmp 중 -100부터 -1까지의 정수의 횟수를 저장할 배열
여기서 0을 plus에 둘지 minus 배열에 둘지는 그냥 본인 선택하기에 다를듯
마지막에 삼항연산자 문법을 사용해서 if else문을 줄여보았다
출처 :
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 배열 1919번 문제, 애너그램 만들기 C++ 풀이 (0) | 2021.08.08 |
---|---|
[백준/BOJ] 배열 1475번 문제, 방 번호 C++ 풀이 (0) | 2021.08.07 |
비쥬얼 스튜디오 설치 없는 온라인 컴파일러 사이트 추천, ideone (0) | 2021.08.06 |
[백준/BOJ] 21312번 문제, 홀짝 칵테일 C++ 풀이 (0) | 2021.03.28 |
[백준/BOJ] 구현 14681번 문제, 사분면 고르기 C++ 풀이 (0) | 2021.03.27 |
[백준/BOJ] 구현 11720번 문제, 숫자의 합 C++ 풀이 (0) | 2021.03.24 |