[BAEKJOON] 배열 3052번 - 나머지

밍챠코·2024년 4월 8일
0

BAEKJOON

목록 보기
38/38

📝[3052]

[Java]

1. Scanner 이용

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
    
        int[] arr = new int[10];
        int cnt = 0; // 서로 다른 나머지들의 개수를 측정하기 위한 변수
    
        for(int i=0; i < arr.length; i++){
            int num = sc.nextInt();
            arr[i] = num % 42 ;
        }
    
        for(int i=0; i < arr.length; i++){
            boolean check = false; // 값을 비교하기 위한 변수의 기본값을 flase로 설정
            for(int j = i + 1; j < arr.length; j++){
                if(arr[i] == arr[j]){ // 배열의 n번째와 n+1번째의 값을 비교
                    check = true; // 두 개의 나머지 값이 같을 시 check값을 true로 변경
                    break; // 한번만 비교하면 되기 때문에 조건 성립 시 if문 벗어나기
                }
            }
            if(check == false){
                cnt ++; // check값이 flase일 때 카운트 1 증가
            }
        }
        System.out.println(cnt);
        
        sc.close();
    }
}

2. BufferedReader 이용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
        int[] arr = new int[10];
        int cnt = 0; // 서로 다른 나머지들의 개수를 측정하기 위한 변수
    
        for(int i=0; i < arr.length; i++){
            int num = Integer.parseInt(br.readLine());
            arr[i] = num % 42 ;
        }
    
        for(int i=0; i < arr.length; i++){
            boolean check = false; // 값을 비교하기 위한 변수의 기본값을 flase로 설정
            for(int j = i + 1; j < arr.length; j++){
                if(arr[i] == arr[j]){ // 배열의 n번째와 n+1번째의 값을 비교
                    check = true; // 두 개의 나머지 값이 같을 시 check값을 true로 변경
                    break; // 한번만 비교하면 되기 때문에 조건 성립 시 if문 벗어나기
                }
            }
            if(check == false){
                cnt ++; // check값이 flase일 때 카운트 1 증가
            }
        }
        System.out.println(cnt);
        
        br.close();
    }
}

3. BufferedReader/HashSet 이용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<Integer> hs = new HashSet<Integer>();
        
        for(int i=0; i < 10; i++){
            hs.add(Integer.parseInt(br.readLine()) % 42); // 입력받은 값의 나머지 값을 add메소드를 통해 HashSet에 저장
        }
        System.out.print(hs.size());
        
        br.close();
    }
}

💡 HashSet : Collection 중 Set의 파생클래스

  • 중복되는 원소를 넣을 경우 하나만 저장 (중복원소 허용x)
  • HashSet.add()
    → HashSet에 저장하는 메서드
    → 중복되는 값이 없으면 HashSet 에 저장되면서 true 반환, 만약 중복되어 저장되지 않으면 false 반환
  • HashSet.size() → HashSet의 크기 (= 저장되어 있는 원소의 개수)를 반환

[Javascript]

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

//입력받은 각각의 요소를 42로 나눈 나머지를 새로운 배열에 저장
const arr = input.map((item) => item % 42);
//새로운 배열에서 중복을 제거
const set = new Set(arr);
const uniqueArr = [...set];

//배열의 길이 = 나머지 개수
console.log(uniqueArr.length);
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(x => Number(x));

//입력받은 각각의 요소를 42로 나눈 나머지를 새로운 배열에 저장
const arr = input.map(x => x % 42);
//새로운 배열에서 중복을 제거
const set = new Set(arr);
const uniqueArr = [...set];

//배열의 길이 = 나머지 개수
console.log(uniqueArr.length);

💡 Set 객체는 값 콜렉션으로, 삽입 순서대로 요소를 순회할 수 있고, 하나의 Set 내 값은 한 번만 나타날 수 있음 (= 유일한 값 저장) / 즉, 중복값을 제거하고 담아냄

💡 Spread Operator
spread 연산자는 특정 객체 또는 배열의 값을 다른 객체나 배열로 복제하거나 옮길때 사용

const arr = [1, 2, 3];
const newArr = [...arr]; // [1, 2, 3]

💡 map() 함수
배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환하는 메서드

💡 화살표 함수(arrow function)
함수 선언을 위한 키워드 function 대신 화살표 => 를 사용하여 함수 선언

// 기존의 익명 함수
(function (a) {
  return a + 100;
});
// 1. "function"이라는 단어를 제거하고 인자와 여는 대괄호 사이에 화살표를 배치
(a) => {
  return a + 100;
};
// 2. 중괄호와 "return"이라는 단어를 제거하면 반환이 암시됨
(a) => a + 100;
// 3. 매개변수의 괄호를 제거 (괄호는 함수에 하나의 간단한 매개변수가 있는 경우에만 생략 가능)
a => a + 100;

[Python]

arr = []

for i in range(10) :
    n = int(input())
    arr.append(n % 42)
    
arr = set(arr)
print(len(arr))

💡 리스트는 중복을 허용하기 때문에 set() 함수를 사용하여 중복을 없애줌
set(arr)의 경우 해당 줄에서만 저장되고 원래 배열 arr은 변하지 않으므로 arr=set(arr)로 작성해야 함

arr = []

for i in range(10):
  n = int(input()) % 42
  if n not in arr:
    arr.append(n)

print(len(arr))

💡 입력값을 42로 나눈 나머지 값이 arr 배열에 없다면 arr 배열에 추가

0개의 댓글