Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
일 월 화 수 목 금 토
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 29 30
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

사전캠프 15일차 본문

Today I Learned

사전캠프 15일차

seaking110 2024. 12. 11. 18:32

같은 조원들과 알고리즘 스터디를 시작했다.

매일마다 2문제씩 풀고 의견을 나누기로 했는데 좋을거같다.

 

1931번 회의실

다들 람다식을 잘 쓰는걸 보고 뭔가 부러웠다. 다들 코드는 거의 유사했다. 

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(bf.readLine());
        int [][] arr = new int[n][2];
        for(int i=0;i<n;i++) {
        	StringTokenizer st = new StringTokenizer(bf.readLine());
        	arr[i][0] = Integer.parseInt(st.nextToken());
        	arr[i][1] = Integer.parseInt(st.nextToken());
        }
        //끝나는 시간을 기준으로 정렬 끝나는 시간이 같다면 시작하는 시간 순으로 정렬
        Arrays.sort(arr, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				// TODO Auto-generated method stub
				if(o1[1]==o2[1]) return o1[0] - o2[0];
				else return o1[1] - o2[1];
			}
        });
        int endTime = arr[0][1]; // 이전 회의가 끝나는 시간
        int count = 1; //사용 가능한 회의의 최대 개수
        for(int i=1;i<n;i++) {
        	  if(arr[i][0] >= endTime) {
        		  count++;
        		  endTime = arr[i][1];
        	  }
        }
       bw.write(String.valueOf(count));
       bw.flush();
       bw.close();
    }
}

 

1541 잃어버린 괄호

나머지 팀원들은 split을 이용해서 -가 나오면 자르고 그 사이를 더하는 식으로 문제를 풀었다. 나는 StringTokenizer를 사용해서 +와- 가 나오면 자르고 Queue에 넣는 식으로 문제를 풀었다. StringTokenizer를 이용해서 - 만 자르고 나머지 끼리는 더한 다음에 빼주는 식이 제일 좋은 방법인거 같다! 

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(bf.readLine(),"+-",true);
        Queue <Integer> q = new LinkedList<>();
        int sum = Integer.parseInt(st.nextToken());
        while(st.hasMoreTokens()) {
        	String op = st.nextToken();
        	if(op.equals("-")) {
        		while(!q.isEmpty()) {
        			sum -= q.poll();
        		}	
        	q.add(Integer.parseInt(st.nextToken()));
        	}
        	else {
        		if(q.isEmpty()) {
        			sum += Integer.parseInt(st.nextToken());
        		}
        		else {
        			q.add(Integer.parseInt(st.nextToken()));
        		}
        	}
     }
        while(!q.isEmpty()) {
        	sum -= q.poll();
        }
        bw.write(String.valueOf(sum));
        bw.flush();
        bw.close();
   
    }
}

 

 

14891번 톱니바퀴

이 문제는 나 혼자 푼 시뮬레이션 문제로 시뮬레이션 문제를 풀다 보니 막 어렵진 않은데 코드가 굉장히 길어져서 디버깅이 굉장히 중요한 유형인거 같다! 또한 문제가 발생하면 문제가 발생한 부분을 찾는게 굉장히 쉽지 않아서 맨 처음부터 잘 짜야할거 같다. 또한 코드를 조금 더 깔끔하게 짤 수 있었는데 아쉽다!

public class Main {
	public static int [][] arr;
	public static boolean turn[] ; 
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        arr = new int[4][8];
        for(int i=0;i<4;i++) {
        	StringTokenizer st = new StringTokenizer(bf.readLine(),"01",true);
        	for(int j=0;j<8;j++) {
        		arr[i][j] = Integer.parseInt(st.nextToken());
        	}
        }
        int n = Integer.parseInt(bf.readLine());
        for(int i=0;i<n;i++) {
        	turn = new boolean[4];
        	StringTokenizer st = new StringTokenizer(bf.readLine());
        	int topni = Integer.parseInt(st.nextToken());
        	int dir = Integer.parseInt(st.nextToken());
        	if(topni == 1) {
        		turn[0] = true;
        		for(int j=0;j<3;j++) {
        			if(arr[j][2]==arr[j+1][6]) {
        				break;
        			}
        			else {
        				turn[j+1] = true;
        			}
        		}
        	}
        	else if(topni==2) {
        		turn[1] = true;
        		dir = dir * -1;
        		if(arr[0][2]!=arr[1][6]) {
        			turn[0] = true;
        		}
        		for(int j=1;j<3;j++) {
        			if(arr[j][2]==arr[j+1][6]) {
        				break;
        			}
        			else {
        				turn[j+1] = true;
        			}
        		}
        	}
        	else if(topni==3) {
        		turn[2] = true;
        		if(arr[2][2]!=arr[3][6]) {
        			turn[3] = true;
        		}
        		for(int j=2;j>0;j--) {
        			if(arr[j][6]==arr[j-1][2]) {
        				break;
        			}
        			else {
        				turn[j-1] = true;
        			}
        		}
        	}
        	else {
        		turn[3] = true;
        		dir = dir * -1;
        		for(int j=3;j>0;j--) {
        			if(arr[j][6]==arr[j-1][2]) {
        				break;
        			}
        			else {
        				turn[j-1] = true;
        			}
        		}
        	}
        	for(int k=0;k<4;k++) {
        		check(k,dir);
        		dir  = dir * -1 ;
        	}
        }
        int sum =0;
        int count = 1;
       	for(int i=0;i<4;i++) {
       		if(arr[i][0]==1) {
       			sum += count;
       		}
       		count *= 2;
       	}
       	bw.write(String.valueOf(sum));
        bw.flush();
        bw.close();
   
    }
    public static void check(int t, int dir) {
    	if(turn[t]) {
    		if(dir==1) {
    			rightMove(t);
    		}
    		else {
    			leftMove(t);
    		}
    		
    	}
    }
    public static void leftMove(int a) {
    	int temp = arr[a][0];
    	for(int i=1;i<8;i++) {
    		arr[a][i-1] = arr[a][i];
    	}
    	arr[a][7] = temp;
    }
    public static void rightMove(int a) {
    	int temp = arr[a][7];
    	for(int i=7;i>0;i--) {
    		arr[a][i] = arr[a][i-1];
    	}
    	arr[a][0] = temp;
    }
}

 

앞으로는 이렇게 알고리즘 스터디용 문제 2개를 풀고 남은 시간에 시뮬레이션 문제를 쭉 풀거같다!

'Today I Learned' 카테고리의 다른 글

17일차 사전캠프  (1) 2024.12.20
16일차 사전캠프  (0) 2024.12.13
사전 캠프 14일차  (1) 2024.12.10
사전캠프 13일차  (1) 2024.12.09
사전캠프 12일차  (0) 2024.12.05