📊 Algorithm&SQL

    [Java/프로그래머스] 로또의 최고 순위와 최저 순위

    문제 풀이 (1) 문제 분석하기 두 배열에서 같은 숫자만 일치했을 때 → 최저 순위 (같은 숫자 + 0의 개수) 만큼 일치했을 때 → 최고 순위 순위는 간편하게 배열로 만들어 인덱스로 접근 (2) 슈도코드 작성하기 순위를 인덱스로 접근할 수 있게 score 배열 생성 두 배열의 같은 숫자를 세는 same_nums와 0의 개수를 세는 zero_count 변수 선언 for(lottos의 길이만큼) { for(win_nums의 길이만큼) { if(lottos와 win_nums의 i번째, j번째가 같다면) { same_nums 1 올려주기 } } if(lottos의 i번째가 0이라면) { zero_count 1 올려주기 } } 최고 순위는 socre[same_nums + zero_count] 최저 순위는 soc..

    [Java/프로그래머스] 두 개 뽑아서 더하기

    문제 풀이 (1) 문제 분석하기 더하려는 두 개의 수는 서로 다른 인덱스! 이중 for문을 돌면서 배열에서 나올 수 있는 모든 두 수의 합을 HashSet에 저장 HashSet은 중복을 허용하지 않음 HashSet을 ArrayList로 변환하고 오름차순으로 정렬한 후, Array로 변환 (2) 슈도코드 작성하기 HashSet 생성 for(numbers의 길이만큼) { for(numbers의 길이만큼) { if(i와 j가 같지 않으면) { set에 numbers[i]와 numbers[j]의 합 추가 } } } HashSet을 ArrayList로 변환 int형의 배열을 ArrayList의 size만큼 생성 for(list size만큼) { ArrayList 요소를 모두 int형 배열에 담음 } 배열 오름차순..

    [Java/프로그래머스] 같은 숫자는 싫어

    문제 풀이 (1) 문제 분석하기 연속 숫자는 제거하고, 순서는 그대로 유지! Arraylist 생성하여 입력 받은 array와 비교하고 중복 없도록 list에 추가 list를 array로 변환하여 리턴 (2) 슈도코드 작성하기 Arraylist 객체 생성 list에 arr[0] 추가 for(arr 길이만큼) { if(list의 마지막과 요소와 배열이 일치 하지 않으면) { list에 arr[i] 추가 } } } list를 배열로 변환하여 리턴 (3) 코드 구현하기 package algorithm.test15; import java.util.ArrayList; import java.util.List; public class Solution { public static void main(String[] ar..

    [Java/프로그래머스] 최소직사각형

    문제 풀이 (1) 문제 분석하기 문제에 현혹되지 말자. 결국 긴 변 중에 가장 긴 변과 짧은 변 중에 가장 긴 별을 곱하면 된다. for문과 if문을 중첩으로 사용했더니 바로 시간초과가 나버렸다...! 배열의 정렬을 이용해보자. 최대수, 최소수를 구해주는 Math.max, Math.min을 이용해보자. (2) 슈도코드 작성하기 // 첫번째 풀이 각 변을 담을 int 변수 biggerSideMax, smallerSideMax 선언 for(sizes의 길이만큼) { if(첫번째 요소가 두번째 요소보다 클 때) { if(긴 변의 요소가 biggerSideMax 보다 클 때 { biggerSideMax에 긴 변 요소 담기 } if(짧은 변의 요소가 smallerSideMax보다 클 때) { smallerSide..

    [Java/프로그래머스] 3진법 뒤집기

    문제 풀이 (1) 문제 분석하기 10진법 → 3진법 먼저 3진법을 어떻게 도출해내는지 알아보자. 10진법으로 표현되어 있는 수를 3으로 계속 나눈 나머지를 뒤에서부터 올린다. 45를 3진법으로 나타내면 1200이다. 3진법 → 10진법 다시 3진법을 10진법으로 변환해보자. 45 = ( 1 X 3³ ) + ( 2 X 3² ) + ( 0 X 3¹ ) + ( 0 X 3 ) 다시 문제로 돌아와서, 데이터 삽입이 자유롭고, 인덱스로 접근이 쉬운 Arraylist를 이용하였다. 반복문을 통해 3으로 계속 나눈 나머지를 list로 add() 한다. 포인트는 굳이 3진법 앞뒤반전을 하지 않아도 곱해주는 3의 n승으로 조정할 수 있다는 것이다. 10진법으로 변환할 때는 제곱 함수 Math.pow(밑, 지수)를 이용한다..

    [Java/프로그래머스] 하샤드 수

    문제 풀이 (1) 문제 분석하기 자릿수대로 누적합을 구한 후, 나머지 연산을 이용 이때 누적합을 구하면서 입력받은 x가 계속 재할당되기 때문에 x를 받을 변수를 하나 선언해야함 (2) 슈도코드 작성하기 누적합을 구할 변수 sum과 x를 받을 변수 num 선언 while(num이 0보다 크면) { num의 일의자리를 sum에 더하고 num을 10으로 나누기 } if(x를 sum으로 나눈 나머지가 0이면) { return true } return true (3) 코드 구현하기 package algorithm.test12; public class Solution { // 반복문 돌면서 자릿수대로 누적합 // 입력 받은 양의 정수로 나눠서 나머지가 0이면 true public static void main(St..

    [Java/프로그래머스] 콜라츠 추측

    문제 풀이 (1) 문제 분석하기 num의 최대 범위가 8,000,000이기 때문에 long으로 타입변환!! 반복문 안에서 조건문을 만들어 짝홀수를 판별 (2) 슈도코드 작성하기 입력 받은 num을 long타입으로 변환 횟수를 담을 answer 변수 선언 if(num이 1이면) { return 0 } while(num이 1이 아니면) { if(answer가 500이면) { return -1 } else if(num이 짝수이면) { num을 2로 나누고 answer++ } else if(num이 홀수이면) { num에 3을 곱하고 1을 더하고 answer++ } } (3) 코드로 구현하기 package algorithm.test11; public class Solution { // 1

    [Java/프로그래머스] 자릿수 더하기

    문제 풀이 (1) 문제 분석하기 요소 하나하나에 접근하기 위해 문자열로 변환하여 split 이용 반복문 돌면서 다시 숫자로 변환하여 더해줌 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 입력 받은 n을 String으로 변환 split을 이용하여 String형 배열로 변환 for(String 배열의 길이만큼){ int형으로 변환하여 정답에 넣기 } 정답 변수 answer 출력 (3) 코드 구현하기 package algorithm.test06; public class Solution { // 숫자를 문자열로 변환 // split으로 문자열 배열로 변환 // 반복문 돌면서 parseInt로 바꿔준 배열 요소 하나하나를 answer에 더함 public static int solution(int n..