강승현입니다
    • 홈
    • 태그
    • 방명록

    카테고리

    • 전체 글 (118)
      • 후기 (38)
        • 경험 (15)
        • SSAFY (9)
        • 코딩테스트 (3)
        • 넥스터즈 (6)
        • 회고 (5)
      • Degrees (2)
      • Tech (33)
      • OnlineJudge (45)
    OnlineJudge

    SWEA 2805 농작물 수확하기 풀이 java

    CODe_byCODe_·2021. 2. 3. 16:57

    문제로이동

     

    SW Expert Academy

    SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

    swexpertacademy.com


    목차

       



      풀이 과정

      첫 시도엔 BFS를 떠올려 시도했습니다.

      D3에 BFS가 나올리는 없어서 다시 생각해보니 다이아몬드 형태를 한 번에 더할 수 있겠다는 확신이 들었습니다.

      0 - 1 - 2 - 1 - 0과 같이 점차 증가했다가 중간값에 도달하면 다시 감소하는 식을 구했습니다만,

      해당 방법 이외에도 양 끝점에서 동시에 값을 더하는 방법이 있습니다.

      for(int i =0;i<중간지점;i++)
      {
      	answer += 위쪽의 합
          	answer += 아래쪽의 합
      }

       

      이렇게 구현한다면 코드가 더 짧아질 수도 있습니다.


      소스 코드

      Java8 1차

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.ArrayDeque;
      import java.util.Deque;
      import java.util.StringTokenizer;
      
      public class Solution {
      	static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      	static StringTokenizer st;
      	static StringBuilder sb = new StringBuilder();
      	static int T,N,answer;
      	static int field[][];
      	static int visited[][];
      	static Deque<Pos> dq = new ArrayDeque<>();
      	static Pos[] direction = {new Pos(0,-1),new Pos(0,1),new Pos(-1,0),new Pos(1,0)};//상하좌우
      	static class Pos{
      		int x,y,depth;
      		public Pos(int x, int y) {
      			this.x = x;
      			this.y = y;
      		}
      		public Pos(int x, int y,int depth) {
      			this.x = x;
      			this.y = y;
      			this.depth = depth;
      		}
      	}
      	static void solution() {
      		dq.clear();
      		dq.add(new Pos(N/2,N/2,1));
      		answer += field[N/2][N/2];
      		visited[N/2][N/2]=1;
      		while(!dq.isEmpty()) {
      			Pos tmp = dq.pollFirst();
      			if(tmp.depth>N/2)break;
      			Deque<Pos> orderQ = new ArrayDeque<>();
      			for(Pos dpos:direction) {
      				int nx = tmp.x+dpos.x;
      				int ny = tmp.y+dpos.y;
      				if(0>nx || nx>=N || 0>ny || ny>=N) {
      					orderQ.clear();
      					break;}
      				else {
      					if(visited[ny][nx]==0)
      						orderQ.add(new Pos(nx,ny));
      				}
      			}
      			for(Pos oPos:orderQ) {
      				answer+= field[oPos.y][oPos.x];
      				visited[oPos.y][oPos.x] = 1;
      				dq.add(new Pos(oPos.x,oPos.y,tmp.depth+1));
      			}
      		}
      	}
      	public static void main(String[] args) throws IOException{
      		T = Integer.parseInt(bf.readLine());
      		for(int t=1;t<=T;t++) {
      			answer = 0;
      			st = new StringTokenizer(bf.readLine());
      			N = Integer.parseInt(st.nextToken());
      			field = new int[N][N];
      			visited = new int[N][N];
      			for(int i =0;i<N;i++) {
      				String tmp = bf.readLine();
      				for(int j =0;j<N;j++) {
      					field[i][j] = tmp.charAt(j)-48;
      				}
      			}
      			solution();
      			sb.append("#").append(t).append(" ").append(answer).append("\n");
      		}
      		System.out.println(sb);
      	}
      }

      Java8 압축

      import java.io.*;
      public class Solution_new {
      	static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      	static StringBuilder sb = new StringBuilder();	
      	public static void main(String[] args) throws IOException{
      		int T = Integer.parseInt(bf.readLine());
      		for(int t=1;t<=T;t++) {
      			int answer = 0, N = Integer.parseInt(bf.readLine());
      			int [][]field = new int[N][N];
      			for(int i =0;i<N;i++) {
      				String tmp = bf.readLine();
      				for(int j =0;j<N;j++)field[i][j] = tmp.charAt(j)-48;
      			}
      			for(int i =0;i<N;i++)
      				for(int j=Math.abs(N/2-i);j<=2*(N/2)-Math.abs(N/2-i);j++)
      					answer+=field[i][j];
      			sb.append("#").append(t).append(" ").append(answer).append("\n");
      		}
      		System.out.println(sb);
      	}
      }
      반응형
      저작자표시 비영리 변경금지 (새창열림)
      'OnlineJudge' 카테고리의 다른 글
      • 백준 20304 비밀번호 제작 풀이 python, java
      • 백준 2263 트리 풀이 pypy3, python3, java
      • 백준 1018 체스판 다시 칠하기 풀이 python, java
      • 백준 10096 세 친구 풀이 python, java
      CODe_
      CODe_
      개발과 관련된 다양한 정보를 몰입감있게 전달합니다.
      최신 글

      티스토리툴바