문제 풀이 및 개발 공간

[문해프] 2주차 본문

카테고리 없음

[문해프] 2주차

gomduri43 2023. 9. 8. 17:43

1번

import java.util.*;
import java.io.*;

public class Test{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        while((st=new StringTokenizer(br.readLine()))!=null){
            int n=Integer.parseInt(st.nextToken());
            int[] num=new int[n];
            int[] dp=new int[n];
            for(int i=0; i<n; i++){
                dp[i]=Integer.parseInt(st.nextToken());
            }
            boolean answer=true;

            for(int i=1; i<n; i++){
                int temp=Math.abs(dp[i]-dp[i-1]);
                if(temp<n) {
                    num[temp]++;
                }
                else{
                    answer=false;
                }
            }
            if(answer) {
                for (int i = 1; i < n; i++) {
                    if (num[i] != 1) {
                        answer = false;
                        break;
                    }
                }
            }
            bw.write(answer ? "Jolly\n" : "Not jolly\n");
            bw.flush();
        }
    }
}

 

2번

import java.util.*;
import java.io.*;

public class Test{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        int t=Integer.parseInt(br.readLine());
        for(int i=0; i<t; i++){
            int n=Integer.parseInt(br.readLine());
            int p=Integer.parseInt(br.readLine());
            int[] num=new int[p];
            for(int j=0; j<p; j++){
                num[j]=Integer.parseInt(br.readLine());
            }
            int[] day=new int[n+1];
            for(int j=0; j<p; j++){
                int k=num[j];
                for(; k<n+1; k+=num[j]){
                    if(k%7==6 || k%7==0){
                        continue;
                    }
                    day[k]=1;
                }
            }
            int answer=0;
            for(int j=1; j<=n; j++){
                answer= day[j]==1 ? answer+1 : answer;
            }
            bw.write(answer+"\n");
        }
        bw.flush();
    }
}

3

import java.io.*;
import java.util.*;

class Point{
	int x;
	int num;
	public Point(int x, int num){
		this.x=x;
		this.num=num;
	}
}

class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		HashMap<String, Integer> dict = new HashMap<>();
		ArrayList<Point> black =new ArrayList<>();
		ArrayList<Point> white =new ArrayList<>();
		dict.put("T",10); dict.put("J",11); dict.put("Q",12); dict.put("K",13); dict.put("A",14);
		dict.put("C",0); dict.put("D",1); dict.put("H",2); dict.put("S",3);
		int value1;
		int value2;
		
		int[] shape;
		
		String input;
		while((input=br.readLine())!=null){
			int blackscore=0;
			int whitescore=0;
			
			black.clear();
			white.clear();
			
			shape=new int[4];
			st=new StringTokenizer(input);
			

			//blac패
			for(int i=0; i<5; i++){
				String word=st.nextToken();
				int cn=0;
				if(word.charAt(0)-'0'<=9){
					cn=Integer.valueOf(String.valueOf(word.charAt(0)));
				}
				else{
					cn=dict.get(String.valueOf(word.charAt(0)));
				}
				shape[dict.get(String.valueOf(word.charAt(1)))]++;
				
				int end=black.size();
				boolean isAdd = false;
				for(int j=0; j<end; j++){
					if(black.get(j).x==cn){
						black.get(j).num++;
						isAdd=true;
						break;
					}
				}
				if(!isAdd){
					black.add(new Point(cn,1));
				}
			}
				int temp;
				Arrays.sort(shape);
				//다 똑같은 경우
				if(shape[3]==5){
					temp=value2(black);
					blackscore= temp==1 ? 1:4;
				}
				if(blackscore==0){
					blackscore=value(black);
				}
				if(blackscore==0){
					temp=value2(black);
					blackscore= temp==1 ? 5 :9;
				}
			
				
				//black 카드랑 우선순위 다 완료;;
				//white 차례
				shape=new int[4];
				for(int i=0; i<5; i++){
					String word=st.nextToken();
					int cn=0;
				
					if(word.charAt(0)-'0'<=9){
						cn=Integer.valueOf(String.valueOf(word.charAt(0)));
					}
					else{
						cn=dict.get(String.valueOf(word.charAt(0)));
					}
					shape[dict.get(String.valueOf(word.charAt(1)))]++;
					
					int end=white.size();
					boolean isAdd=false;
					for(int j=0; j<end; j++){
						if(white.get(j).x==cn){
							white.get(j).num++;
							isAdd=true;
							break;
						}
					}
					if(!isAdd){
						white.add(new Point(cn,1));
					}
				}
				Arrays.sort(shape);
			
				if(shape[3]==5){
					temp=value2(white);
					whitescore= temp==1 ?  1:4;
				}
				if(whitescore==0){
					whitescore=value(white);
				}
				if(whitescore==0){
					temp=value2(white);
					whitescore= temp==1 ? 5:9;
				}
				//white 긑
			//이제 서로비교하기
				int answer=10;   //0비긴거 -1black 1white
 			
				if(whitescore < blackscore){
					bw.write("White wins.\n");
					continue;
				}
				else if(blackscore<whitescore){
					bw.write("Black wins.\n");
					continue;
				}
				else{
					if(blackscore==1 || blackscore==5){
						black=sortX(black);
						white=sortX(white);
						if(black.get(black.size()-1).x < white.get(white.size()-1).x){
							answer=1;
						}
						else if(black.get(black.size()-1).x > white.get(white.size()-1).x){
							answer=-1;
						}
						else{
							answer=0;
						}
						
					}
					
					else if(blackscore==2){
						black=sortN(black);
						white=sortN(white);
						if(black.get(black.size()-1).x > white.get(white.size()-1).x){
							answer=-1;
						}
						else if(black.get(black.size()-1).x < white.get(white.size()-1).x){
							answer=1;
						}
						else{
							answer=0;
						}
					}
					
					else if(blackscore==3 || blackscore==6){
						black=sortN(black);
						white=sortN(white);
						if(black.get(black.size()-1).x > white.get(white.size()-1).x){
							answer=-1;
						}
						else if(black.get(black.size()-1).x < white.get(white.size()-1).x){
							answer=1;
						}
						else{
							answer=0;
						}
						
					}
					
					else if(blackscore==4 || blackscore==9){
						black=sortX(black);
						white=sortX(white);
						for(int i=4; i>=0; i--){
							if(black.get(i).x > white.get(i).x){
								answer=-1;
								break;
							}
							else if(white.get(i).x > black.get(i).x){
								answer=1;
								break;
							}
						}
						answer = answer==10 ? 0 : answer;
					}
					
					else if(blackscore==7){
						black=sortN(black);
						white=sortN(white);
						for(int i=2; i>=0; i--){
							if(black.get(i).x>white.get(i).x){
								answer=-1;
								break;
							}
							else if(white.get(i).x > black.get(i).x){
								answer=1;
								break;
							}
						}
						answer= answer==10 ? 0 : answer;
						
					}
					else if(blackscore==8){
						black=sortN(black);
						white=sortN(white);
						for(int i=3; i>=0; i--){
							if(black.get(i).x > white.get(i).x){
								answer=-1;
								break;
							}
							else if(white.get(i).x > black.get(i).x){
								answer=1;
								break;
							}
						}
						answer = answer==10 ? 0:answer;
					}
					if(answer==1){
						bw.write("White wins.\n");
					}
					else if(answer==-1){
						bw.write("Black wins.\n");
					}
					else{
						bw.write("Tie.\n");
					}
					bw.flush();
					
				}
	
		}
			
	}
	
	//색 다 똑같
	public static int value2(ArrayList<Point> a){
		a=sortX(a);
		boolean is=true;
		for(int i=0; i<a.size()-1; i++){
			if(!(a.get(i).x+1==a.get(i+1).x)){
				is=false;
				break;
			}
		}
		return is ? 1:0;
	}
	
	public static int value(ArrayList<Point> a){
		int same=0;
		int sum=0;
		for(int i=0; i<a.size(); i++){
			if(a.get(i).num!=1){
				same+=a.get(i).num;
				sum++;
			}
		}
		if(same==4){
			return sum==2 ? 7 :2;
		}
		else if(same==5){
			return 3;
		}
		else if(same==3){
			return 6;
		}
		else if(same==2){
			return 8;
		}
		else{
			return 0;
		}
		
	}
	
	public static ArrayList<Point> sortX(ArrayList<Point> a){
		Collections.sort(a, new Comparator<Point>(){
			public int compare(Point o1, Point o2){
				return o1.x-o2.x;
			}
		});
		return a;
	}
	
	public static ArrayList<Point> sortN(ArrayList<Point> a){
		Collections.sort(a, new Comparator<Point>(){
			public int compare(Point o1,Point o2){
				if(o1.num==o2.num){
					return o1.x-o2.x;
				}
				else{
					return o1.num-o2.num;
				}
			}
		});
		return a;
	}
	
}