2024_08_30 Kata

SJ.CHO·2024년 8월 30일

알고리즘 Kata

58

  • 답안 :

  • 에라토네스의 체를 사용한답안.

public class Solution {
    //에라토네스의 체를 사용하여 3000이하의 소수를 먼저확인 후 sum값이 소수인지 확인 후 리턴.
    //fasle 가 소수
	public boolean primeSol(int sum) {
		boolean prime[] = new boolean[3000];
		prime[0] = prime[1] = true;
		for (int i = 2; i < prime.length; i++) {
			if (!prime[i]) {
				for (int j = i * i; j < prime.length; j += i) {
					prime[j] = true;
				}
			}
		}
		return prime[sum];
	}
	3개의 값을 전부 더한 후 소수의 값을 확인.
	public int solution(int[] nums) {
		int answer = 0;
		for (int i = 0; i < nums.length; i++) {
			for (int j = i + 1; j < nums.length; j++) {
				for (int z = j + 1; z < nums.length; z++) {
					int sum = nums[i] + nums[j] + nums[z];
					if (!primeSol(sum)) {
						answer++;
					}
				}
			}
		}
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Solution s = new Solution();
		int[] num = { 1, 2, 7, 6, 4 };
		System.out.println(s.solution(num));
	}
}
  • 에라토네스의 체 : n이하의 소수를 구하는 가장 간단하고 빠른방법.
    소수를 제외한 소수의 배수부터 N의배수까지를 전부 제거하여 소수만 남는 기법이다.

  • 알고리즘 설명 : 에라토네스의 체 알고리즘을 사용하여 최대값인 3000이하의 소수를 판별해낸뒤 배열로저장. 후에 sum값을 idx로 이용하여 소수인지 아닌지 판별.

  • 보완사항 : 메서드가 실행될때마다 3000까지의 연산을 N번하고있음. 1번만 계산하고 배열을 저장하고있으면 더 효율적일거같음.

  • LIST 를 사용한 답안


import java.util.ArrayList;

public class Solution {

	public int solution(int[] nums) {
		int answer = 0;
		ArrayList<Integer> arr1 = new ArrayList<>();
		for (int i = 0; i < nums.length; i++) {
			for (int j = i + 1; j < nums.length; j++) {
				for (int z = j + 1; z < nums.length; z++) {
					int sum = nums[i] + nums[j] + nums[z];
					arr1.add(sum);
				}
			}
		}
		for (int i = 0; i < arr1.size(); i++) {
			boolean flag = false;
			for (int j = 2; j < arr1.get(i); j++) {
				if (arr1.get(i) % j == 0) {
					flag = true;
					break;
				}
			}
			if (flag == false) {
				answer++;
			}
		}
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Solution s = new Solution();
		int[] num = { 1, 2, 7, 6, 4 };
		System.out.println(s.solution(num));
	}
}
  • 알고리즘 설명 : 배열내의 모든 경우의 수를 구하고 이후에 경우의수를 전부 돌아보면서 소수인지 아닌지 판별.

SQL Kata

56

답안 :

SELECT CAR_ID,CAR_TYPE,DAILY_FEE,OPTIONS
from CAR_RENTAL_COMPANY_CAR 
where OPTIONS like '%네비게이션%'
order by 1 desc
  • like 기능을 이용하여 풀면 쉬운문제

57

답안 :

SELECT BOARD_ID,WRITER_ID,TITLE,PRICE,
case when STATUS ='SALE' then '판매중'
when STATUS ='RESERVED' then '예약중'
else '거래완료' end as 'STATUS'
from USED_GOODS_BOARD 
where date_format(CREATED_DATE,'%Y-%m-%d')='2022-10-05'
order by 1 desc
  • Date 데이터 형식을 이용하여 날짜를 찾아내고 STATUS 컬럼의 값을 한글화해주기 위해 case when 문을 사용하여 상태값을 변경

58


답안 :

SELECT a1.APNT_NO, p1.PT_NAME,a1.PT_NO,a1.MCDP_CD,d1.DR_NAME,a1.APNT_YMD
from APPOINTMENT a1
left join PATIENT p1
on a1.PT_NO = p1.PT_NO
left join DOCTOR d1
on a1.MDDR_ID=d1.DR_ID
where a1.APNT_CNCL_YN ='N' AND a1.MCDP_CD ='CS' AND DATE_FORMAT(a1.APNT_YMD,"%Y-%m-%d") = "2022-04-13"
order by 6
  • 3중조인을 이용하여 데이터를 한테이블로 묶고 나머지는 조건을 WHERE절을 이용하여 처리.
profile
70살까지 개발하고싶은 개발자

0개의 댓글