알고리즘 90

백준 No.10815 숫자카드- JAVA

문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있따. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오 5 6 3 2 10 -10 8 10 9 -5 2 3 4 5 -10 풀이 첫번쨰로 주어진 숫자 중에 두번쨰로 주어진 숫자가 포함된다면 1을 출력하고 없으면 0을 출력하면 된다. 문제는 쉬웠는데 이상한 곳에서 계속 멈춰있었다... while문에서 else 구문에 빠지고 탈출을 break로 해버리면 for문까지 탈출해버렸기 때문에 최대한 다른 방법으로 해보려 했지만 못하다가 메소드로 분리하니까 바로 해결 이진 탐색으로 문제를 푸는데 시작 인덱스 0부터 주어진 N-1 인덱스를 기준으로 두번쨰 줄에 주어..

알고리즘 2023.04.03

백준 No.6236 용돈 관리- JAVA

문제 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 뺴서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺸 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 떄문에, 정확히 M번을 맞추기 위해서 남은 금액이 그날 사용할 금액보다 많더라도 남은 금액은 통장에 집어넣고 다시 K원을 인출할 수 있다. 현우는 돈을 아끼기 위해 인출 금액 K를 최소화하기로 하였다. 현우가 필요한 최소 금액 K를 계산하는 프로그램을 작성하시오 풀이 해당 문제는 계속 생각만하다가 못 풀었다...

알고리즘 2023.04.01

백준 No.1654 랜선 자르기- JAVA

문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개으 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm짜리 랜선을 두개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 떄는 항상 센티미터 단위로 정수길이만큼 자른다고 가..

알고리즘 2023.03.31

백준 No.2805 나무자르기 - JAVA

문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할 것이다. 목재 절단기는 다음과 같이 동작한다. 먼저, 상근이는 절다니겡 높이 H를 지정해야한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해 있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20,15 ,10 17 이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15..

알고리즘 2023.03.29

프로그래머스 Lv.2 순위검색-JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr https://coding-grandpa.tistory.com/104 [2021 카카오 코딩테스트] 순위 검색 - 자바 java 0. 자세한 설명은 YouTube 영상으로 1. Hash + 이분 탐색을 활용한 solution import java.util.*; class Solution { public int[] solution(String[] info, String[] query) { // 1...

알고리즘 2023.03.29

프로그래머스 Lv.2 뒤에 있는 큰 수 찾기-JAVA

문제 정수로 이루어진 배열 numbers가 있습니다. 배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷큰수라고 합니다. 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return하도록 solution함수를 완성해주세요. 단, 뒨 큰수가 존재하지 않는 원소는 -1을 담습니다. 풀이 - 처음에 문제를 2중 for문으로 풀었는데 시간초과로 계속 통과하다 마지막 4개를 통과못했다. 그래서 풀이를 찾아봤고 풀이는 stack을 사용하여 풀었다. 문제는 간단하게 2,3,3,5 가 있을 경우 2의 경우 자신보다 크면서 가장 가까운게 3이고, 3은 5가 크고 5는 없으니 -1이다 결국 3,5,5,-1 이 되는 구조이다..

알고리즘 2023.03.26

프로그래머스 Lv.1 모의고사 - JAVA

문제 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맺힌 사람이 누구인지 배열에 담아 return 하도록 solution함수를 작성 풀이 - 여기서 1,2,3 번에 패턴이 정해져 있고 해당 패턴을 보면 12345(5)ㅡ21232425(8)-3311224455(10) 자리이다. 처음에 레벨 1이길래 간단하게 생각해서 풀었는데 21점으로 계속 틀렸다. 이유가 있었는데 바로 정답에 길이가 길 수도 있는 경우였다. 그러니까 주어지는 배열 answers가 12가 나오는데 for문이 12까지..

알고리즘 2023.03.24

프로그래머스 Lv.2 문자열 압축 - JAVA

문제 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면 "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상으 ㅣ단위로 잘라서 ..

알고리즘 2023.03.22

프로그래머스 Lv.2 무인도 여행 - JAVA

문제 메리는 여름을 맞아 무인도로여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1x1 크기의 사각형등로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때 상, 하, 좌, 우로 연결되는 땅들을 하나의 무인도를 이룹니다. 지도의 각 칸에는 적힌 숫자는 식량을 나타내는데, 상, 하 좌,우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도에서 최대 며칠동안 머물 수 있는지를 나타냅니다. 어떤 섬으로 놀러 갈지 못 정한 메리는 우선 각 섬에서 최대 며칠씩 머물 수 있는지 알아본 후 놀러갈 섬을 결정하려 합니다. 지도를 나타내는..

알고리즘 2023.03.21

프로그래머스 Lv.2 호텔 대실 - JAVA

문제 호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다. 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return하는 함수를 작성 풀이 여기서 가장 어려운게 입력이었던 것 같다... 입력형태가 HH:MM 형태로 들어오는데 해당 형태를 기존에는 substring으로 긁어서 가져오는 형식으로 했는데 마지막에 테스트17번에서 계속 실패했다. 이유는 10분을 추가했을 경우 1시간을 올리는 문제였는데 그걸 몰라 결국 마지막에 다른사람의 풀이를 보고 알게 되었다. 그래서 입력형식도 substring이 아닌 r..

알고리즘 2023.03.20