백준 문제
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 |