📊 Algorithm&SQL

    [MySQL/프로그래머스] 오랜 기간 보호한 동물(2)

    문제 풀이 (1) 문제 분석하기 보호 시작일은 ANIMAL_INS 테이블에, 입양일은 ANIMAL_OUTS 테이블 ⇒ 두 테이블을 JOIN 보호 기간이 긴 순으로 정렬 ⇒ ORDER BY 보호 기간(입양일 - 보호 시작일) DESC 결과는 동물 2마리만 ⇒ LIMIT 2 (2) 쿼리 구현하기 🔸 DATEDIFF 함수를 이용한 풀이 SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC -- DATEDIFF 사용 LIMIT 2 가장 먼저 떠올린 건 특정 날짜의 차이를 연산해 주는 DATEDIFF 함수였다..

    [Java/프로그래머스] K번째 수

    문제 풀이 (1) 문제 분석하기 정답 배열의 길이를 입력받은 commands의 길이로 설정 입력값이 2차원 배열로 주어지므로 반복문을 돌면서 연산 배열을 특정 인덱스로 자르기 위해 Arrays.copyOfRange 사용하여 원본 배열 복사 Array.copyOfRange(array, startIndex, lastIndex) int[] array = {1, 2, 3, 4, 5}; int[] result = Arrays.copyOfRange(array, 1, 4); // result : [2, 3, 4] // 마지막 인덱스 포함X (2) 슈도코드 작성하기 int형 정답 배열의 길이를 commands의 길이로 설정 for(commands의 길이만큼) { commands의 0, 1, 2번째 수를 변수에 담음 배..

    [Java/프로그래머스] 예산

    문제 풀이 (1) 문제 분석하기 가장 적은 신청 금액부터 더하여 비교할 수 있도록 먼저 배열 오름차순 정렬 반복문을 돌면서 i번째 요소를 누적해서 더하고, budget과 조건문으로 비교 budget보다 작으면 count를 1 올려주고, 아니라면 반복문 멈춤 (2) 슈도코드 작성하기 누적해서 더한 값을 담을 sum 변수와 더해진 요소의 개수를 세어줄 count 변수 선언 for(d 배열의 길이만큼){ d의 i번째 요소를 sum에 더함 if(sum이 budget보다 작으면){ count를 1 올려줌 }else{ 반복문 멈춤 } } count 반환 (3) 코드 구현하기 package algorithm.test27; import java.util.Arrays; public class Solution { // 입..

    [Java/프로그래머스] 약수의 합

    문제 풀이 (1) 문제 분석하기 반복문을 돌면서 n을 i로 나눴을 때 나머지가 0인 값을 정답 변수에 더함 이때 주어진 반복 횟수를 줄이기 위해 정수 n을 1/2로 나눈 값 만큼 반복문을 돌고, 나온 값에 n을 미리 더함 (2) 슈도코드 작성하기 정답을 담을 int형 변수 answer n으로 초기화 for(1부터 n/2포함까지){ if(n을 i로 나눴을 때 나머지가 0이면){ answer에 i를 더함 } } 정답 변수 answer 반환 (3) 코드 구현하기 package algorithm.test26; public class Solution { // for문을 돌면서 정수 n을 i로 나눠서 딱 떨어지는 값을 answer에 더함 // 반복문은 n/2 까지 public int solution(int n) {..

    [Java/프로그래머스] 약수의 개수와 덧셈

    문제 풀이 (1) 문제 분석하기 약수의 개수를 count하는 메소드를 따로 분리 입력 받은 수만큼 반복문을 돌면서 메소드로 약수의 개수를 구한 뒤, 짝/홀수 판별하여 answer에 담아줌 이때 약수 개수가 홀수라면 음수로 저장되어야 하므로 * (-1) (2) 슈도코드 작성하기 정답을 담을 int형 answer 변수 선언 for(left부터 right만큼) { if(약수의 개수가 짝수라면) { 정답에 i를 담음 else(약수의 개수가 홀수라면) { 정답에 -i를 담음 } } // 약수의 개수를 구할 메소드 분리 정수 n을 매개변수로 받는 메소드 생성 개수를 세줄 int형 변수 count 1로 초기화 for(2부터 n포함까지) { if(n을 i로 나눴을 때 나머지가 0이면 count++ count를 반환 }..

    [Java/프로그래머스] 숫자의 표현

    문제 풀이 (1) 문제 분석하기 이전에 풀었던 문제와 유사하여 같은 방식으로 풀이 2022.10.03 - [📊 Algorithm] - [Java/백준] 연속된 자연수의 합 구하기 #2018 시작 인덱스와 종료 인덱스를 투포인터로 지정하여 접근 투포인터 이동 원칙 연속된 자연수의 합이 입력 받은 값보다 작으면 -> endIndex를 올려주고, sum에서 endIndex를 더해줌 연속된 자연수의 합이 입력 받은 값과 같으면 -> endIndex를 올려주고, sum에서 endIndex를 더해줌, count 올려줌 연속된 자연수의 합이 입력 받은 값보다 크면 -> startIndex를 올려주고, sum에서 startIndex를 빼줌 (2) 슈도코드 작성하기 사용 변수 초기화(sum, count, startInd..

    [Java/프로그래머스] 숫자 문자열과 영단어

    문제 풀이 (1) 문제 분석하기 포함될 수 있는 영단어(zero ~ nine)를 담은 String 배열 생성 배열 길이만큼 for문으로 돌면서 입력 받은 문자열에 해당 영단어가 있는지 확인 → contains() 있다면, 해당 영단어를 i로 대체 → replace() String.contains() 특정 문자열 포함 확인 대상 문자열에 특정 문자열이 포함되어 있는 확인하고, true or false를 반환한다. 대/소문자 구분하여 사용이 가능하다. String.replace(찾을 문자열, 바꿀 문자열) 문자열 대체 대상 문자열을 원하는 문자 값으로 변환한다. 차례대로 찾을 문자열과 바꿀 문자열을 입력한다. replace() vs replaceAll() 둘의 차이점은? replaceAll은 정규식 사용이 ..

    [Java/프로그래머스] 문자열 내림차순으로 배치하기

    문제 풀이 (1) 문제 분석하기 문자열을 char 형 배열로 변환 → str.toCharArray() char형 배열을 정렬 → Arrays.sort(charArr) char형 배열을 문자열로 변환 → String str = new String(charArr) 역정렬을 위해 StringBuilder로 받기 → StringBuilder strBuil = new StringBuilder(str) reverse() 적용 → String reversStr = strBuil.reverse().toString() (2) 슈도코드 작성하기 문자열을 char형 배열로 변환 char형 배열을 오름차순으로 정렬 StringBuilder로 받아서 내림차순으로 정렬 하도록 reverse() (3) 코드 구현하기 package..