본문 바로가기
Code/baekjoon [ 단계별 ]

백준 단계별 문제 <1차원 배열>

by jaeaemin 2022. 2. 16.

 

백준 문제 

2562번 자바 

 

문제 해결은 2가지 방법으로 해결했다.

1번째 방법은 Scanner와 배열을 이용한 방법

2번째 방법은 BufferReader를 통해 스트림 처리 

 

 

1번째 방법 

import java.util.*;

public class Array_1 {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int max=0;
        int max_index=0;
        int[] arr = {sc.nextInt(), sc.nextInt(), sc.nextInt(),
                sc.nextInt(), sc.nextInt(), sc.nextInt(),
                sc.nextInt(), sc.nextInt(), sc.nextInt() };
        sc.close();

        for(int i=0; i<9; i++) {
            if (arr[i] > max) {
                max = arr[i];
                max_index = i+1;
            }
        }
        System.out.println(max);
        System.out.println(max_index);
    }
}

Scanner를 이용한 풀이로 먼저 사용될 배열을 미리 선언해준다.

문제에서는 배열의 길이가 9라고 특정해주었기 때문에 이 방법을 선택할 수 있었다.

그 이후엔 각 들어온 배열은 하나씩 탐색하면서 최대값과 인덱스를 찾아 출력한다.

 

 

 

 

 

2번째 방법 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Array_1_2 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[9];
        for (int i = 0; i < 9; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        int max = 0, index = 0, cnt = 0;

        for (int value : arr) {
            cnt++;
            if (value > max) {
                max = value;
                index = cnt;
            }
        }
        System.out.println(max);
        System.out.println(index);
    }
}

 

BufferReader로 입력값들을 스트림으로 받아온다.

그 뒤에 입력값마다 줄 바꿈을 단위를 이용하여 Int형으로 변환한뒤 배열에 넣어준다.

그 뒤는 탐색해가면서 큰 수를 찾는다.

 

 

 

둘을 비교했을 때 역시 BufferedReader를 사용하는 경우에 속도나 메모리 사용면에서 더 효율적인 측면이 있었다.

 

 

 

 

 

 

 

백준 문제

2577 자바

 

 

이 문제의 경우 2가지의 접근법이 있는데 

곱 한 결과에 대해서 한자리씩 비교하는 것이기 때문에 숫자의 몫,나머지 연산을 이용해서 처리할 것인지

아니면 문자열의 charAt()을 이용해서 하나씩 문자열을 비교할 것인지 2가지의 방법으로 해결 할 수 있다.

 

 

 

1번째로 간단히 입력을 읽어서 곱한 뒤 몫, 나머지 연산자를 이용해 10씩 나누면서 해결하는 방법이다.

배열에 해당하는 숫자의 카운트만 하면 되기 때문에 역순으로 진행되도 상관없다.

 

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

public class Q2577 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
        int[] arr = new int[10];

        while(num != 0){

            arr[num%10]++;
            num/=10;
        }

        for(int res : arr){
            System.out.println(res);
        }
    }
}

 

 

 

2번째 방법은 문자열로 처리하는 방법이다.

이 때는 연산은 Integer로 수행하고 String.valueOf(int)를 이용하여 계산값을 문자열로 바꾼 뒤

문자열의 길이만큼 String.charAt(index)를 이용하여 아스키 코드로 불러들인 뒤 -48를 연산하여

실제 숫자값을 구한 뒤 배열에 카운트해주면 된다.

 

package Array;
import java.io.IOException;
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Q2577_2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[10];

        int val = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
        String str = String.valueOf(val);
        System.out.println(str);

        for(int i=0; i<str.length(); i++){
            arr[(str.charAt(i)-48)]++;
        }
        for(int num : arr) {
            System.out.println(num);
        }
    }
}

 

 

 

 

 

 

 

 

백준 문제

3052 자바

 

 

이 문제는 42로 나눈 나머지 0 ~ 41까지 서로 다른 나머지가 몇 개나 등장하는지 출력하는 문제이다.

처음 보면서 든 생각은 Hash함수를 통해서 Hash내 함수를 이용하는 방법과 배열에 나머지 값을 담고 요소를 순차적으로 검색하면서 갯수를 구하는 방법을 생각했다.

 

 

 

1번째 방법 

BuffredReader를 통해서 읽어와서 각 숫자를 ReadLine 한 뒤 나머지를 구하여 나머지 배열에 넣어준 뒤

순차탐색을 이용하여 풀면 해결되는 문제이다.

 

package Array;
import java.io.EOFException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Q3022 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] res = new int[42];
        int onlyResCount = 0;

        for(int i=0; i<10; i++) {
            int tmp = Integer.parseInt(br.readLine());
            res[tmp % 42]++;
        }

        for(int value : res){
            if(value > 0) onlyResCount++;
        }

        System.out.print(onlyResCount);
    }
}

 

 

 

 

2번째 방법

Hash Table 이용하는 방법으로 HashTable을 Integer 형식으로 선언 한 뒤에, 각 나머지 값들을 추가해 주고

HashSet.size() // True인 Hash 수 를 출력하면 결과값이 출력하게 된다.

 

package Array;
import java.util.HashSet;
import java.io.*;

public class Q3022_2 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<Integer> hRes = new HashSet<Integer>();

        for(int i=0; i<10; i++) {
            hRes.add(Integer.parseInt(br.readLine()) % 42) ;
        }
        System.out.print(hRes.size());
    }
}
반응형

'Code > baekjoon [ 단계별 ]' 카테고리의 다른 글

백준 단계별 문제 <함수>  (0) 2022.02.20
백준 단계별 문제 <배열>  (0) 2022.02.19
백준 단계별 문제 <for문>  (0) 2022.02.14
백준 단계별 문제 <if문 >  (0) 2022.01.20
백준 단계별 문제 < 입출력 >  (0) 2022.01.12