상세 컨텐츠

본문 제목

[1일1커밋 5D] LeetCode SQL & 백준 JAVA 10431, 8979, 7568, 4659

취준/2. 코딩테스트

by ranlan 2024. 9. 6. 23:48

본문

728x90

4일차 밀려서 호다닥 쓰고 뒤늦게 시작한 5일차

 

LeetCode SQL 50

Sorting and Grouping | 1141. User Activity for the Past 30 Days I

select to_char(activity_date, 'yyyy-mm-dd') day, count(distinct user_id) active_users
from Activity 
where activity_date between to_date('2019-07-27', 'yyyy-mm-dd')-29 and to_date('2019-07-27', 'yyyy-mm-dd')
group by activity_date
order by day

이제 MySQL 보다 오라클이 편해진..

처음에 30일 기간 어쩌구 하길래 30일 이전부터 ~ 조건을 걸었는데 틀린 예제 답을 보니 30일 전 데이터는 포함이 아니였다.

 


 

알고리즘 문제 풀이 시간을 늘릴려고 SQL 문제를 대폭 줄이거나 생략할까 한다. 난 시간이 없거덩

 

BaekJoon 백준

10431. 줄세우기 https://www.acmicpc.net/problem/10431

실버5 | 구현

보자마자 생각났던 버블정렬. 학부때는 외워서 그냥 아무생각 없이 짰던 코드인데 버블정렬 다시 생각하려니까 잘 안된다..

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

public class Main {
	static int[] arr;
	static int T, num, i;
	static int cnt=0;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		
		for(int tc=0; tc<T; tc++) {

			StringTokenizer st = new StringTokenizer(br.readLine());
			num = Integer.parseInt(st.nextToken());
			
			i=0;
			arr = new int[20];
			cnt = 0;
			while(st.hasMoreTokens()) {
				arr[i]=Integer.parseInt(st.nextToken());
				i++;
			}
			
			for(i=1; i<20; i++) {
				for(int j=0; j<20-i; j++) {
					if(arr[j] > arr[j+1]) swap(j, j+1);
				}
			}
			
			System.out.println(num+" "+cnt);
			
		}
	}
	
	static void swap(int a, int b) {
		int tmp = arr[a];
		arr[a] = arr[b];
		arr[b] = tmp;
		cnt++;
	}
}

 

🫧 버블정렬 : 간단하지만 효율적이진 않아 자주 쓰이진 않는 정렬 알고리즘

for(int i=0; i<N; i++) { // 전체 확인해야 하는 배열 원소 수
	for(int j=0; j<N-i-1; j++) { // 실제 확인하는 인덱스
		if(arr[j] > arr[j+1]) swap(j, j+1);
	}
}

 

8979. 올림픽 https://www.acmicpc.net/problem/8979

실버5 | 구현
import java.util.Scanner;

public class Main {

	static int n, k;
	static int[][] medals;
	static int idx;
	static int rank=1;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		k = sc.nextInt();
		
		medals = new int[n+1][3];
		for(int i=0; i<n; i++) {
			idx = sc.nextInt();
			
			medals[idx][0] = sc.nextInt();
			medals[idx][1] = sc.nextInt();
			medals[idx][2] = sc.nextInt();
		}
		
		for(int i=1; i<n+1; i++) {
			if(i==k) continue;
			if(medals[i][0] > medals[k][0]) 
				rank++;
			else if(medals[i][0] == medals[k][0]) 
				if(medals[i][1] > medals[k][1]) 
					rank++;
				else if(medals[i][1] == medals[k][1]) 
					if(medals[i][2] > medals[k][2]) 
						rank++;
		

		}
        System.out.println(rank);
	}
}

이런 류의 문제를 좀 어려워하는데 막상 풀이 찾아보면 그냥 문제 그대로 구현하여 간단히 푸는 경우가 많다. 너무 어렵게 생각하지 말고 문제를 잘 활용하자!

이래가지고 코테 어떻게 볼거냐 멍충아 😱

 

7568. 덩치 https://www.acmicpc.net/problem/7568

실버5 | 구현, Brute Force
import java.util.Scanner;

public class Main {
	
	static int[] rank;
	static class Body{
		int h, w;
		public Body() {}
		public Body(int h, int w){
			this.h=h;
			this.w=w;
		}
	}
	static Body[] arr;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		arr = new Body[n];
		rank = new int[n]; // 0으로 초기화 
		for(int i=0; i<n; i++) {
			arr[i]=new Body();
			arr[i].h=sc.nextInt();
			arr[i].w=sc.nextInt();
		}
		
		for(int i=0; i<n; i++) { // 비교 기준 
			for(int j=0; j<n; j++) { // 상대 
				if(i==j) continue;
				if((arr[i].h < arr[j].h) && arr[i].w < arr[j].w) rank[i]++;
			}
		}
		
		for(int i=0; i<n; i++) System.out.print(rank[i]+1+" ");
	}
}

바로 위 문제(8979)와 비슷한 유형의 문제

 

할수이따.. 오늘 실버 5 끝내자!!

 

4659. 비밀번호 발음하기 https://www.acmicpc.net/problem/4659

실버5 | 구현

TODO

 

728x90

관련글 더보기

댓글 영역