🎮 알고리즘
🚧
아무것도 없어요😢
-
[Java] 프로그래머스 : 요격 시스템🤔 문제 🔗 각 폭격 미사일의 x 좌표 범위 목록 targets이 매개변수로 주어질 때, 모든 폭격 미사일을 요격하기 위해 필요한 요격 미사일 수의 최솟값을 return 하도록 solution 함수를 완성해 주세요. 💡 풀이과정 특정 범위에 있는 폭격 미사일을 요격하는 미사일의 개수를 나타내는 문제이다. 구조를 그림으로 나타내면 다음과 같다. 폭격 미사일 배열을 순회해 기존에 있는 요격 미사일로 폭격 가능한지 따지는 방법으로 풀 수 있다. 폭격 가능할 경우 필요에 따라 요격 미사일의 요격 범위 (s, e)를 수정해준다. 폭격 불가능할 경우 새로운 요격 미사일을 추가하는 방식으로 풀면 된다. 하지만 폭격 미사일 배열을 그대로 사용하면, s 좌표와 e 좌표를 모두 고려해주어야 하므로 복잡하다. 그렇다면 배열..🎮 알고리즘2023.06.26
-
[Java] 프로그래머스 : 베스트앨범🤔 문제 🔗 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 💡 풀이과정 해싱과 정렬을 사용하는 문제이다. 모든 노래를 리스트에 담아 정렬한 후 리스트를 순회하며 장르마다 노래를 두개씩 뽑아내는 방식으로 풀면 된다. 우선, Music 클래스를 작성해보자. class Music implements Comparable { int id; int genre; int play; public Music(int id, int genre, int play) { this.id = id; this.genre = genre; this.play = play..🎮 알고리즘2023.06.26
-
[Java] 프로그래머스 : 의상🤔 문제🔗코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.👊 풀이과정의상의 종류와 이름이 주어졌을 때, 중복 없이 입을 수 있는 경우의 수를 구하는 문제이다. 여기서 중요한 것은 의상 종류의 가짓수와 각 종류의 갯수이다. 의상 정보를 담기 위해 HashMap을 사용했다. key에는 의상 종류가, 값에는 그 갯수가 들어간다.HashMap map = new HashMap(); map에 특정 종류 의상이 존재하는지 확인한다. 없을 경우 추가해주고, 이미 존재할 경우 값을 1 증가시킨다.for(String[] c : clothes) { if(!map.containsKey(c[1])) { map.put(c[1],..🎮 알고리즘2023.06.16
-
[Java] 프로그래머스 : 전화번호 목록🤔 문제 🔗 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 👊 풀이과정 가..🎮 알고리즘2023.06.15
-
[Oracle] 프로그래머스 : 저자 별 카테고리 별 매출액 집계하기🤔 문제 🔗 2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요. 👊 풀이과정 GROUP BY를 사용하는 문제이다. 특정 날짜 조건에 해당하는 절만 가져오도록 하기 위해 TO_CHAR()을 사용했다. 💻 소스코드 SELECT AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(PRICE*SALES) AS SALES FROM BOOK JOIN AUTHOR USING(AUT..🎮 알고리즘2023.06.15
-
[Oracle] 프로그래머스 : 식품분류별 가장 비싼 식품의 정보 조회하기우연히 구글링하다가 풀이를 먼저 발견한 문제인데 근본적으로 이렇게 풀면 안될 것 같은데? 하는 생각이 들어서 풀고 그 방법을 공유해본다. 🤔 문제 🔗 FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요. 👊 풀이과정 각 카테고리 별로 가장 가격이 높은 식품의 정보를 조회하는 문제이다. 내가 보았던 풀이는 이런식이었다. SELECT CATEGORY,PRICE MAX_PRICE ,PRODUCT_NAME FROM FOOD_PRODUCT WHERE PRICE IN(SELECT MAX(PRICE) FROM F..🎮 알고리즘2023.05.30
-
정렬 알고리즘 : 버블정렬, 선택정렬, 삽입정렬가장 기본적인 정렬 알고리즘으로 버블정렬, 선택정렬, 삽입정렬을 들 수 있다. 빅오표기법에 따르면 O(N^2)의 시간복잡도를 가진다. java로 이 세가지 정렬 알고리즘을 구현해보자. 📁 버블정렬 Bubble Sort 인접한 두 원소의 값을 비교하여 자리를 교환하는 정렬 알고리즘 버블정렬은 비교와 교환 두 종류의 단계를 거친다. ⏳ 과정 인접한 두 원소의 값을 비교한다. 두 값의 순서가 바뀌어 있을 경우, 교환(swap)한다. 1~2의 패스스루가 끝나면 정렬되지 않은 값 중 가장 큰 값, 즉 '버블'이 맨 오른쪽 위치로 이동한다. 따라서 다음 패스스루는 제대로 정렬된 마지막 인덱스를 제외하고 이루어진다. 💻 소스코드 static void bubbleSort(int[] arr) { int temp; // ..🎮 알고리즘2023.05.24
-
[Java] 프로그래머스 : 다리를 지나는 트럭🤔 문제 🔗 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요. 👊 풀이과정 두개의 연결리스트를 이용해야 하는 문제다. 아직 출발하지..🎮 알고리즘2023.04.15
-
[Java] 프로그래머스 : 신규 아이디 추천🤔 문제 🔗 신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요. 제한사항 new_id는 길이 1 이상 1,000 이하인 문자열입니다. new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다. new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,/ 로 한정됩니다. 👊 풀이과정 매개변수로 아이디가 들어오면 다음 조건에 맞게 아이디를 변경해 리턴하는 메서드를 작성해야 한다. String answer = new_id.toLowerCase() .replaceAll("[^a-z0-9._-]","")// 사용불가문자..🎮 알고리즘2023.04.14
-
[Java] 프로그래머스 : 징검다리 건너기🤔 문제 🔗 디딤돌에 적힌 숫자가 순서대로 담긴 배열 stones와 한 번에 건너뛸 수 있는 디딤돌의 최대 칸수 k가 매개변수로 주어질 때, 최대 몇 명까지 징검다리를 건널 수 있는지 return 하도록 solution 함수를 완성해주세요. 👊 풀이과정 징검다리에서 각 디딤돌의 밟을 수 있는 횟수가 담긴 배열 stones와 한번에 건너뛸 수 있는 디딤돌의 최대 칸수 k가 주어졌을 때, 징검다리를 건널 수 있는 친구는 몇 명인지 구하는 프로그램을 작성한다. 이 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제다. 당시 플그에서 처음 풀어본 효율성 테스트 문제라 힘들었다... 👆 효율성을 배제한 풀이 public static int solution(int[] stones, int k) { int answ..🎮 알고리즘2023.04.14