1번 개수 세기

문제 

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어 있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

 

출력

첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.

 

배열에 저장하고 조건에 맞는 값을 출력한다.

 

C++

#include <iostream>
using namespace std;
int main(){
    int n, v, count;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++){
        cin >> arr[i];
    }
    
    cin >> v;
    for (int i = 0; i < n; i++){
        if (arr[i] == v)
            count++;
    }
    cout << count;
    return 0;
}

 

입력될 크기인 n 만큼의 크기의 배열을 선언하고 반복문으로 배열에 값들을 저장한다.

 

그리고 v의 입력을 받아 반복문으로 배열을 순회하면서 같은 값인 경우 count를 증가시키고 최종 개수를 출력한다.

 

C#

using System;
class Program{
    static void Main(string[] args){
        int n = int.Parse(Console.ReadLine());
        int[] arr = new int[n];
        string input = Console.ReadLine().Trim();
        string[] input_arr = input.Split(' ');
        for (int i = 0; i < n; i++){
            arr[i] = int.Parse(input_arr[i]);
        }
        int v = int.Parse(Console.ReadLine());
        int count = 0;
        for (int i = 0; i < n; i++){
            if (arr[i] == v)
                count++;
        }
        Console.WriteLine(count);
    }
}

 

Python

n = int(input())
values = input().strip().split(' ')
arr = [0] * n
for i in range(n):
    arr[i] = int(values[i]);
v = int(input())
count = 0;
for i in range(n):
    if arr[i] == v:
        count += 1
print(count)

 

Node.js

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin','utf8').split('\n');
const n = parseInt(input[0]);
const values = input[1].split(' ');
const v = parseInt(input[2]);
let count = 0;
const val_arr = new Array(n);
for (let i = 0; i < n; i++){
    val_arr[i] = parseInt(values[i]);
}
for (let i = 0; i < n; i++){
    if (val_arr[i] === v)
        count++;
}
console.log(count);

 

더 효율적인 방법도 있지만 1차원 배열을 사용해서 푸는걸 중점으로 두었기 때문에 불필요한 변수와 반복문이 사용되기도 한다.

 

2번 X보다 작은 수

문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N과 X가 주어진다. 

(1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

 

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

 

1번을 풀었던 것처럼 배열을 사용하는데 중점을 둔다.

 

C++

#include <iostream>
using namespace std;
int main(){
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    int n, x;
    cin >> n;
    cin >> x;
    int arr[n];
    for (int i = 0; i < n; i++){
        cin >> arr[i];
    }
    for (int a : arr){
        if (a < x){
            cout << a << " ";
        }
    }
    return 0;
}

 

배열의 모든 요소를 순회할 때는 for (int a : arr)를 사용할 수 있다.

 

C#

using System;
class Program{
    static void Main(string[] args){
        string input = Console.ReadLine();
        string[] input_arr = input.Split(' ');
        int n = int.Parse(input_arr[0]);
        int x = int.Parse(input_arr[1]);
        input = Console.ReadLine();
        input_arr = input.Split(' ');
        int[] arr = new int[n];
        for (int i = 0; i < n; i++){
            arr[i] = int.Parse(input_arr[i]);
        }
        
        foreach(int a in arr){
            if (a < x){
                Console.Write($"{a} ");
            }
        }
    }
}

 

Python

n, x = map(int, input().split())
str_arr = input().split();
arr = [0] * n;
for i in range(n):
    arr[i] = int(str_arr[i])
for i in range(n):
    if arr[i] < x :
        print(f"{arr[i]} ", end="")

 

출력 시 print는 기본적으로 줄 바꿈을 실행하므로 end=""로 설정해서 줄 바꿈을 제거한다.

 

 

Node.js

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin','utf8').split('\n');
const [n, x] = input[0].split(' ').map(Number);
const values = input[1].split(' ').map(Number);
let result = [];
values.forEach(value => {
    if (value < x) {
        result.push(value);
    }
});

console.log(result.join(' '));

 

각각의 입력 값들을 정리하고 결과를 따로 배열에 저장한 뒤 일괄적으로 출력한다.

 

1, 2번 문제들은 고정 크기의 배열을 사용해서 풀었지만 가변 배열인 vector 나 list 등을 사용하면 더 간단하게 처리할 수 있는 문제이기 때문에 이후에는 가변 배열을 사용해서 풀어보기로 한다.

728x90
반응형

+ Recent posts