Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 스프링 에러
- 백준 16935
- 자바 리트코드
- 코딩테스트
- 파이썬
- 스택
- 리트코드 자바
- 프로그래머스 java
- 백준 18222
- 리트코드 1557
- 백준
- Java
- java leetcode
- 카카오
- BFS
- DP
- 코테
- dfs
- java 프로그래머스
- 프로그래머스
- 리트코드
- daily challenge
- leetcode 1721
- 자바
- 인텔리제이 에러
- 구현
- 자바 5464
- 그래프 자바
- leetcode
- 분할정복
Archives
- Today
- Total
레벨업 일지
[Java] 백준 17829 222-풀링 본문
문제
재귀를 사용해서 문제 풀이를 구현할 줄 아는지 묻는 문제.
풀이
이미지 압축일종인 CNN 풀링중 222-풀링은 4 개의 원소 중 2번째로 큰 원소를 찾는다.
stride 기법으로 , 배열 원소 4개씩 살펴 본 뒤, 2번째로 큰 원소를 k번째 칸에 삽입한다.
풀이는 다음과 같다.
- 현재 size 를 파라미터로 담아 재귀 호출을 한다. 1이 되면 종료한다.
- 각 단계마다 4개의 원소를 리스트에 담아 정렬한다.
- 4개중 2번째로 큰 원소니깐, 정렬된 리스트의 3번째 값을 저장한다.
- 재귀 호출을 불러. 1번 알고리즘으로 돌아간다.
- 정답을 리턴한다.
코드
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
int arr[][];
ArrayList<Integer> l;
public static void main(String[] args) throws IOException {
Main m = new Main();
m.solution();
}
public void solution() throws IOException {
FastReader fr = new FastReader();
int N = fr.nextInt();
arr = new int[N][N];
l = new ArrayList<>();
for(int i =0 ;i < N ;i++){
for(int j= 0 ; j< N ;j++){
arr[i][j] = fr.nextInt();
}
}
pooling2By2(N);
System.out.println(arr[0][0]);
}
public void pooling2By2(int N){
if(N == 1)return;
int a;
int b;
int stride =0;
for(int i =0 ; i< N ;i+=2){
for(int j =0 ;j < N ;j+=2){
l.removeAll(l);
l.add(arr[i][j]);
l.add(arr[i+1][j]);
l.add(arr[i+1][j+1]);
l.add(arr[i][j+1]);
Collections.sort(l);
arr[stride/(N/2)][stride%(N/2)] = l.get(2);
//System.out.println(l+", "+l.get(2));
//System.out.println(stride/(N/2)+","+stride%(N/2));
stride++;
}
}
pooling2By2(N/2);
}
public static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 18222 투에-모스 문자열 (0) | 2023.07.05 |
---|---|
[Java] 백준 1074 Z (0) | 2023.07.04 |
[Java] 백준 16935 배열 돌리기 3 (0) | 2023.06.29 |
[Java] 백준 10799 쇠막대기 (0) | 2023.06.29 |
[Java] 백준 5464.주차장 (0) | 2023.06.27 |
Comments