import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Solution {
static int N;
static String[] arr;
	public static void main(String[] args) throws Exception{
      // TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
		int T;
		T=Integer.parseInt(br.readLine());
      
		StringBuilder sb = new StringBuilder();
		for(int test_case = 1; test_case <= T; test_case++)
		{ 
			N = Integer.parseInt(br.readLine()); 
			arr = new String[N];
    	  
			for(int i=0; i<N; i++) {
				arr[i] = br.readLine();
			}
			
			int starti=N-1;
			int startj= N-1; 
			int endi =0;
			int endj =0;
			
			for(int i=0; i<N; i++) {
				if(!arr[i].contains("#")) continue;
				for(int j=0; j<N; j++) {
					if(arr[i].charAt(j) == '#') {
						starti=Math.min(starti,i);
						startj=Math.min(startj,j);
						endi=Math.max(endi,i);
						endj=Math.max(endj,j);
					}
				}
			}
			boolean check = true;
            for(int i = starti; i <= endi; i++) {
                for(int j = startj; j <= endj; j++) {
                    if(arr[i].charAt(j)=='.') {
                    	check=false;
                    	break;
                    }
                }
            }
            String result = (check && endi-starti == endj-startj) ? "yes":"no";
			sb.append("#"+test_case+" "+result).append('\n');
		}
		System.out.print(sb);
	}
}

 

20개 test case 중에 16개만 맞아서

내가 생각하지 못한 예외가 뭘까 하구 ,, 하다가

시간이 너무 지체되서 😂🤣😂🤯😭

사람들 풀이를 보았다 ,,^^

 

내가 너무 복잡하게 생각했구나 느꼈고 

endi-starti 랑 endj-startj 같은지 검사하는 거에서 소름(?) 😱

이걸 왜 생각못했을까 했다. ....

가로 세로 길이 같은 지 검사해서 정사각형 판단할수도 있는데 ~~~ 

왜 난 생각 못했냐구요 ~

 

'NOTE > SWEA' 카테고리의 다른 글

10993. 군주제와 공화제 - d3  (0) 2022.06.15
12051. 프리셀 통계 - d3  (0) 2022.06.12
13038. 교환학생 - d3  (0) 2022.06.11
10761. 신뢰 - d3  (0) 2022.06.11
7227. 사랑의 카운슬러 - d3  (0) 2022.06.11
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
	static int N;
	static String s;
	static int[] days;
	static int answer;
    public static void main(String[] args) throws Exception{
      // TODO Auto-generated method stub

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
      int T;
      T=Integer.parseInt(br.readLine());
      
      StringBuilder sb = new StringBuilder();
      StringTokenizer st;
      for(int test_case = 1; test_case <= T; test_case++)
      { 
    	  N = Integer.parseInt(br.readLine()); //n일동안 수업 들음
    	  days = new int[7];    	 
    	  
    	  st = new StringTokenizer(br.readLine()," ");
    	  
    	  for(int i=0; i<7;i++) {
    		  days[i]=Integer.parseInt(st.nextToken());
    	  }
    	  
    	  answer = Integer.MAX_VALUE;
    	  
    	  for(int i=0; i<7; i++) {
    		  if(days[i]==1) {
		       	 answer=Math.min(answer,takeLesson(i));
    		 }
    	 }
   
    	 sb.append("#"+test_case+" "+answer).append('\n');
      }
      System.out.print(sb);
   }

    static int takeLesson(int i) {
    	int count = 0;
     	  int result = 0;
     	  while(count!=N) {
     		  if(days[i%7]==1) {
     			 count++;
     		  }
     		  result++;
     		  i++;  
     	  }
     	 return result;
    }
}

 

처음에 문제 이해를 잘못했었다.

댓글 보고 문제를 이해했다..

 

요일을 어디서부터 시작해야하는거지 싶었는데

처음에 1이 시작하는 부분부터 해서 틀룠다..

 

어디로 시작해도 상관없고 다만 최소여야 한다는거 !

 

0 1 0 0 0 1 1

이게 days에 들어가 있고 N이 2라면

 

답은 2가되어야 한다.

(일월화수목금토)

금,토 수강하면 되니깐 🤩

 

'NOTE > SWEA' 카테고리의 다른 글

12051. 프리셀 통계 - d3  (0) 2022.06.12
13732. 정사각형 판정 - d3  (0) 2022.06.12
10761. 신뢰 - d3  (0) 2022.06.11
7227. 사랑의 카운슬러 - d3  (0) 2022.06.11
9778. 카드 게임 - d3  (0) 2022.06.10
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
	static int time;
	static int locationB;
	static int locationO;
	static ArrayList<Integer> B;
	static ArrayList<Integer> O;
    public static void main(String[] args) throws Exception{
      // TODO Auto-generated method stub

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
      int T;
      T=Integer.parseInt(br.readLine());
      
      StringBuilder sb = new StringBuilder();
      StringTokenizer st;
      
      for(int test_case = 1; test_case <= T; test_case++)
      {
    	  st = new StringTokenizer(br.readLine()," ");
    	  int N = Integer.parseInt(st.nextToken());
    	  String[] sequenceRobot = new String[N];
    	  B = new ArrayList<>();
    	  O = new ArrayList<>();
    	  
    	  for(int i=0; i<N; i++) {
    		   sequenceRobot[i]=st.nextToken();
    		   if(sequenceRobot[i].equals("B")) {
    			   B.add(Integer.parseInt(st.nextToken()));
    		   }else {
    			   O.add(Integer.parseInt(st.nextToken()));
    		   }
    	  }
    	  
    	 time = 0;
    	 locationB = 1;
    	 locationO = 1;
    	 int i=0;
    	 while(B.size()!=0 || O.size()!=0) {
    		 if(B.size()!=0 && O.size()==0) {
    			 while(B.size()!=0) {
    				 delete(B.get(0),"B");
    			 }
    		 }else if(O.size()!=0 && B.size()==0) {
    			 while(O.size()!=0) {
    				 delete(O.get(0),"O");
    			 }    			 
    		 }else {
    			 String robot = sequenceRobot[i];
    			 i++;
    			 int buttonB = B.get(0);
    			 int buttonO = O.get(0);
    			 
    			 int moveB = Math.abs(locationB-buttonB);
    			 int moveO = Math.abs(locationO-buttonO);
    			 
    			 if (robot.equals("B")) {
    				 delete(buttonB,"B");
                     if (moveB>=moveO) {//O가 움직인 시간동안 갈 수 있음
                         locationO = buttonO;
                     } else{ //가까운쪽으로 움직이기
                         if (locationO > buttonO) 
                        	 locationO -= (moveB + 1);
                         else if (locationO < buttonO) 
                        	 locationO += (moveB + 1);
                     }
                 }else{
                	 delete(buttonO,"O");
                	 if (moveO>=moveB) { //B가 움직인 시간동안 갈 수 있음
                         locationB = buttonB;
                     } else{
                         if (locationB > buttonB) 
                        	 locationB -= (moveO + 1);
                         else if (locationB < buttonB) 
                        	 locationB += (moveO + 1);
                     }
                 }
    			 
    		 }
    		 
    	 }
    	  sb.append("#"+test_case+" "+time).append('\n');
      }
      System.out.print(sb);
   }
    
    static void delete(int button,String s) {
		if(s.equals("B")) {
			time += (Math.abs(locationB-button)+ 1);
       	 	locationB = button;
       	 	B.remove(0);
		}
		else {
			time += (Math.abs(locationO-button)+ 1);
       	 	locationO = button;
       	 	O.remove(0);
		}
    }
}

처음에 문제 이해부터 헤맸다

그리고 테케 5개만 맞았다해서 당황했다..^^

그냥 다 틀린거잖아요~..

 

그래서 여러 풀이들을 보고.......

나는 B랑 O랑 ArrayList 따로 만들어서 푸는 것을 택했다....

'NOTE > SWEA' 카테고리의 다른 글

13732. 정사각형 판정 - d3  (0) 2022.06.12
13038. 교환학생 - d3  (0) 2022.06.11
7227. 사랑의 카운슬러 - d3  (0) 2022.06.11
9778. 카드 게임 - d3  (0) 2022.06.10
7102. 준홍이의 카드놀이 - d3  (0) 2022.06.10
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Solution {
   static int[][] location;
   static boolean[] check;
   static int N;
   static long min;
    public static void main(String[] args) throws Exception{
      // TODO Auto-generated method stub

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
      int T;
      T=Integer.parseInt(br.readLine());
      
      StringBuilder sb = new StringBuilder();
      StringTokenizer st;
      
      for(int test_case = 1; test_case <= T; test_case++)
      {
    	  N = Integer.parseInt(br.readLine());
    	  location = new int[N][2]; //지렁이 위치
    	  
    	  for(int i =0; i<N; i++) {
    		  st = new StringTokenizer(br.readLine()," ");
    		  location[i][0]=Integer.parseInt(st.nextToken());
    		  location[i][1]=Integer.parseInt(st.nextToken());
    	  }
    	  check = new boolean[N];
    	  
    	  min= Long.MAX_VALUE;
    	  make(0, 0);
    	  
    	  sb.append("#"+test_case+" "+min).append('\n');
      }
      System.out.print(sb);
   }
    public static void make(int cnt, int start) {
    	if(cnt == N/2) {
			min = Math.min(vectorPlus(),min);
			return;
		}
		for(int i=start; i<N; i++) {
			if(check[i] == false) {
				check[i] = true;
				make(cnt+1,i+1);
				check[i] = false;
			}
		}
	}
    static long vectorPlus() {
    	long dx = 0, dy = 0;
		for (int i=0; i <N; i++) {
			if (check[i] == true) {
				dx += location[i][0];
				dy += location[i][1];
			}
			else {
				dx -= location[i][0];
				dy -= location[i][1];
			}
		}
		return (dx*dx)+(dy*dy);
    }
}

 

지렁이 두마리씩 짝 짓기~

(내 짝도 ..😂)

 

난 벡터 성질을 몰랐다 ... 진짜 기억도 안나 옛날엔 알았나? ㅎ ㅎ ..

 

두 점 (x1,y1), (x2,y2) 가 있으면

(x1-x2, y1-x2) 

 

따라서 true 인 애가 (x1,y1)

false인 애가(x2,y2)

 

그러니깐 .. 조합(make())에선 (x1,y1)가 될 애들을 뽑아준거죠(방문)~

그래서 cnt == N/2 가 종료조건 !

 

true인 애를 더해주고 false 인 애를 빼주면

dx = x1-x2

dy = x2-y2

 

각 지렁이들이 움직인 벡터를 합하여 그 크기가 최소가 되도록 하는 문제이므로

 

저렇게 다 계산해준 다음(누적)

 

dx*dx + dy*dy 해주어서 벡터의 크기를 구하는 문제였다 .. (┬┬﹏┬┬)

 

근데 사실 아직도 내가 제대로 이해한건지 모르겠삼  맞나요? 내 머리 이해좀 해봐 .. 일하라고~

 

 

 

 

 

 

 

 

'NOTE > SWEA' 카테고리의 다른 글

13038. 교환학생 - d3  (0) 2022.06.11
10761. 신뢰 - d3  (0) 2022.06.11
9778. 카드 게임 - d3  (0) 2022.06.10
7102. 준홍이의 카드놀이 - d3  (0) 2022.06.10
14361. 숫자가 같은 배수 -d3  (0) 2022.06.10

 

import java.util.Scanner;

public class Solution {
 	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		
		int T;
		T=Integer.parseInt(sc.nextLine());
		
		StringBuilder sb = new StringBuilder();
		
		for(int test_case = 1; test_case <= T; test_case++)
		{
			int[] deck = {0,0,4,4,4,4,4,4,4,4,16,4};
		
			int N = Integer.parseInt(sc.nextLine());
			String result = "GAZUA";
			if(N>=9) result="STOP";
			else {
				int sum=0;
				for(int i=0; i<N; i++) {
					int num = Integer.parseInt(sc.nextLine());
					deck[num]-=1;
					sum+=num;
				}
				int over21 =0;
				for(int i=2; i<deck.length; i++) {
					if(deck[i]==0) continue;
					if((sum+i)>21){
						over21+=deck[i];
					}
				}
				if(2*over21>=(52-N)) {
					result = "STOP";
				}
			}
			sb.append("#"+test_case+" "+result).append('\n');
		}
		System.out.print(sb);
	}
}

 

왕 쉽다 생각했는데

자꾸 테케 하나틀려서 뭐지했는데

마지막에 sb 출력할때 ln으로 해서....................

이상한 곳에서 시간 날렸다 ^_^ 아냐 교훈 get

'NOTE > SWEA' 카테고리의 다른 글

10761. 신뢰 - d3  (0) 2022.06.11
7227. 사랑의 카운슬러 - d3  (0) 2022.06.11
7102. 준홍이의 카드놀이 - d3  (0) 2022.06.10
14361. 숫자가 같은 배수 -d3  (0) 2022.06.10
9480. 민정이와 광직이의 알파벳 공부 - d3  (0) 2022.06.09

 

import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
 	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		
		int T;
		T=Integer.parseInt(sc.nextLine());
		
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		for(int test_case = 1; test_case <= T; test_case++)
		{
			st=new StringTokenizer(sc.nextLine()," ");
			
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
			
			HashMap<Integer,Integer> hm = new HashMap<>();
			
			for(int i=1; i<=N; i++) {
				for(int j=1; j<=M; j++) {
					if(hm.containsKey(i+j)) {
						hm.put(i+j,hm.get(i+j)+1);
					}else
						hm.put(i+j,1);
				}
			}
			
			ArrayList<Integer> al = new ArrayList<>(hm.keySet());
			Collections.sort(al,(o1,o2)->hm.get(o2).compareTo(hm.get(o1)));
			
			int max = hm.get(al.get(0));
			
			sb.append("#"+test_case+" ");
			for(int i: al) {
				if(max==hm.get(i))
					sb.append(i+" ");
				else break;
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}
}

 

*HashMap -> value 기준으로 정렬하기

 

ArrayList<Integer> al = new ArrayList<>(hm.keySet()); 

 

keySet을 al에 담고


Collections.sort(al,(o1,o2)->hm.get(o2).compareTo(hm.get(o1)));

 

정렬!

 

+ 내림차순으로 하고싶으면

Collections.sort(al,(o1,o2)->hm.get(o1).compareTo(hm.get(o2)));

 

이렇게 되면 al에 value 기준으로 정렬한대로 key들이 존재하게 된다 ~_~

따라서 al.get(0) 이게 value 젤 높은 key 값!

 

-> 를 이용해서 쓰는게 직관적이고 깔끔해보여서 앞으로 이렇게 쓰려고 한다  😀

 

 

 

 

'NOTE > SWEA' 카테고리의 다른 글

7227. 사랑의 카운슬러 - d3  (0) 2022.06.11
9778. 카드 게임 - d3  (0) 2022.06.10
14361. 숫자가 같은 배수 -d3  (0) 2022.06.10
9480. 민정이와 광직이의 알파벳 공부 - d3  (0) 2022.06.09
8016. 홀수 피라미드 - d3  (0) 2022.06.06
import java.util.Scanner;
public class Solution {
	static int N,len;
	static int[] arr;
	static boolean[] check;
	static boolean result;
 	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		
		int T;
		T=Integer.parseInt(sc.nextLine());
		
		StringBuilder sb = new StringBuilder();
		for(int test_case = 1; test_case <= T; test_case++)
		{
			String s = sc.nextLine();
			
			N = Integer.parseInt(s);
			
			result = false;
			
			len = s.length();
			arr = new int[len];
			check = new boolean[len];
			
			for(int i=0; i<s.length(); i++) {
				arr[i]=s.charAt(i)-'0';
			}
			
			make("",0);
			
			sb.append("#"+test_case+" "+ (result ? "possible":"impossible")).append('\n');
		}
		
		System.out.println(sb);
	}
 	
 	static void make(String s,int count) { 
 		
 		if(result== true) return;
 		
 		if(count==len) {
 			int temp = Integer.parseInt(s);
 			if(s.charAt(0)-'0'!=0 && temp>N && temp%N==0) {
 				result=true;
 			}
 			return;
 		}
 		
 		for(int i=0; i<len; i++) {
			if(check[i]==false) {
				check[i]=true;
				make(s+Integer.toString(arr[i]),count+1);
				check[i]=false;
			}
		}
 	}
}

기본중의 기본이자나여~

꼭 다시풀어보기~ 잊쥐뫄

 

밤에 풀다가 잤다,, 아침에 산뜻한 시작 🤩

'NOTE > SWEA' 카테고리의 다른 글

9778. 카드 게임 - d3  (0) 2022.06.10
7102. 준홍이의 카드놀이 - d3  (0) 2022.06.10
9480. 민정이와 광직이의 알파벳 공부 - d3  (0) 2022.06.09
8016. 홀수 피라미드 - d3  (0) 2022.06.06
9940. 순열1 - d3  (0) 2022.06.04
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.Arrays;
public class Solution {
	static int N,result;
	static String[] str;
 	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		
		int T;
		T=Integer.parseInt(sc.nextLine());
		
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		for(int test_case = 1; test_case <= T; test_case++)
		{
			N = Integer.parseInt(sc.nextLine());
			str = new String[N];
 			for(int i=0; i<N; i++) {
				str[i]= sc.nextLine();
			}
			
 			result = 0;
			check("",0); 
			sb.append("#"+test_case+" "+result).append('\n');
			
		}
		System.out.println(sb);
	}
 	
 	static void check(String s,int index) {		
 		if(index==N) {
 			if(alphabetCount(s)>0) {
 				result += 1;
 			}
 			
 			return;
 		}
 		check(s+str[index],index+1);
 		check(s,index+1);
 	}
 	
 	static int alphabetCount(String s) {
 		int[] alp = new int[26];
  		for(int i=0; i<s.length(); i++ ) {
 			alp[(int)s.charAt(i)-97]+=1;
 		}
  		Arrays.sort(alp);
  		return alp[0];
 	}
}

어제 하다가 왜 안되지 하고 잤는데

지금 보니까 바로 된다 ;; 알고리즘은 컨디션빨 아닐까?

종료조건의 문제였삼 아하~

'NOTE > SWEA' 카테고리의 다른 글

7102. 준홍이의 카드놀이 - d3  (0) 2022.06.10
14361. 숫자가 같은 배수 -d3  (0) 2022.06.10
8016. 홀수 피라미드 - d3  (0) 2022.06.06
9940. 순열1 - d3  (0) 2022.06.04
4371. 항구에 들어오는 배 - d3  (0) 2022.05.31

+ Recent posts