전체 글 10

프로그래머스, 최소직사각형

이번 문제 이해하는데 애를 좀 먹었는데사고력을 길러야 할 것 같다고 절실히 느끼게 해준 문제입니다 ..,,   .간략히 설명해드리자면,  우선 2차 배열을 입력받습니다. 2차배열의 각 행들은 [w, h]즉, [가로, 세로]로 이루어져있고 이 수많은 행들 각각의 값들을 비교하여 큰 값을 maxWidth에, 작은 값을 maxHeight에 대입하여 이차배열을 순회하면서 더 큰 값이 나타날 때마다 maxWidth값과 maxHeight값을 갱신하는 방법으로 풀 수 있습니다.    ex) sizes = [[60, 50], [30, 70], [60, 30], [80, 40]] 60과 50을 비교하여 큰 숫자인 60을 width에 작은 숫자인 50을 height에 저장하고 또 30과 70을 비교하여 큰 숫자인 70을 ..

알고리즘 2024.07.10

프로그래머스, 수열과 구간 쿼리3

문제에 대해 간략하게 설명드리겠습니다. 입력받는 배열은 총 2개 arr, queries입니다.   queries배열의 인덱스 값에 해당하는 arr배열의 요소들의위치를 서로 바꿔주는 것이 이번 문제의 해결방법입니다.   ex) arr = [1, 2, 3, 4, 5] queries = [[0,3]] 이라면 arr배열의 요소들 중에서 인덱스 값이 0인 1과 인덱스 값이 3인 4의 위치를 서로 바꿔서 result배열로 출력따라서, result = [4, 2, 3, 1, 5]가 됩니다.    코드가 매우 간단하죠.?이 간단하고 짧은 코드에서도알아두셨으면 하는 알고리즘이 하나 있습니다.   위의 3줄은 arr[i]와 arr[j]의 값을 서로 바꾸기 위해temp라는 변수를 추가해서 하나하나씩 값을 서로 바꿔주는 역할..

알고리즘 2024.07.10

프로그래머스, K번째수

이번 문제에 대해서 간략히 설명해드리면 배열을 슬라이싱해서슬라이싱한 배열에서 주어진 인덱스값(k)을 이용하여해당하는 요소를 찾아내서 새로운 배열에 추가해주는 코드입니다!  출력해야 할 answer배열과 commands배열의 요소 개수가 같으니 for문은commands배열의 길이만큼 돌아주게 설정하면 됩니다. int[] subArray = Arrays.copyOfRange(array, start, end);로 새로운 배열을 하나 생성해주고 새롭게 생성한 배열을 오름차순 정렬을 해준 뒤에 오름차순 정렬을 마친 새로운 배열의 k번째 값을 answer배열에 넣어주면 이번 문제 해결입니다!

알고리즘 2024.07.10

LEETCODE, Smallest Number in Infinite Set

간단하게 문제 설명을 해드리자면 이번 문제에서 쓰이는 매서드는 크게 최솟값을 삭제해주는 popSmallest() Set안에 중복되는 수가 없다면 파라미터로 입력받은 수를 추가해주는addBack() 이렇게 두 가지입니다.      우선순위 큐는 기본적으로 최소 우선 순위로 지정되어있습니다. 그래서 우선순위 큐에 별다른 지정없이 값을 꺼내면자동으로 최솟값을 추출하게 됩니다. 이런 특징을 이용해서 popSmallest() 매서드를 이용하여최솟값 꺼내고 set에서도 제거. addBack() 매서드에서는 파라미터로 입력받은 정수가현재 set안의 최솟값보다 작고 set.add(num)이 true로 출력되면큐에다가 num을 추가해주는 방식입니다 !

알고리즘 2024.07.10

LEETCODE, Minimum Number

문제에서 요구하는 것은 nums라는 배열이 주어지고 그 배열 안에는 짝수 개의 요소들만 들어갈 수 있는 게 전제조건이고, 이제 nums안의 요소들을 2개씩 꺼내야하는데 Alice라는 친구가 nums 배열 안에 있는 요소들 중에서최솟값을 꺼내고 Bob이라는 친구가 그 다음으로 작은 값을 꺼내서 Bob친구가 꺼낸 값을 다시 새로운 배열에 추가하고Alice친구가 꺼낸 값을 새로운 배열에 추가해주면서 새로운 배열을 만들어내는 코드입니다. 요약하자면 꺼내는 순서는 Alice --> Bob이고,다시 배열에 추가하는 순서는 Bob --> Alice입니다. ex) nums = {5, 4, 2, 3}이고 최솟값 2를 Alice가 그 다음 작은 값인 3을 Bob이 꺼내서{3, 2}순서로 집어넣어주고 남은 {5, 4}도 똑..

알고리즘 2024.07.10

LEETCODE, Valid Parenthesis

저도 영어 공포증이 있는데요.. 그래도 먼저 문제를 풀어본 입장에서설명드리겠습니다. 여는 괄호 '(' , '{', '[' 를 스택에 추가하고 각각의추가된 여는 괄호 뒤에는 그 괄호들을 닫는 ')', '}', ']'가 나온다면출력값으로 true 아니라면 false를 출력하게 하는 문제입니다.    스택의 기본 특징을 이용하여 응용해서 푸는 문제로 생각이 듭니다.  문제를 풀기 위해서 알아야 할 간단한 선수 지식은stack에 문자 추가하는 방법 그리고stack의 가장 마지막에 추가한 문자와 현재의 문자를 비교하여true 또는 false를 반환하는 방법정도 일 것 같습니다 ~  아직도 스택과 큐가 익숙치 않고 어색하신 분들이라면스택과 큐에는 이런 비슷한 유형과 난이도의 문제들이 많으니 자주 접하시다보면 자연스..

알고리즘 2024.07.10

프로그래머스, 같은 숫자는 싫어

키워드는 문제의 해시태그에 나온 것과 같이 스택과 큐로 분류되어 있습니다.이번 문제는 스택으로 접근해서 풀어보겠습니다. 스택과 큐는 알고리즘에서 자주 쓰이는만큼 이 부분에 대해서 잘 모르시는 분이라면시간을 조금만 투자하시면 금방 익히실 수 있을 거라 생각합니다! 스택의 기본 개념은 (Last-In-First-Out)입니다. 후입선출이라고도 하는데 예시로 들자면 양쪽에 구멍이 뚫린 원기둥의 한 쪽을 막고 남은 한 구멍에 물건들을 차례대로 넣으면 꺼낼 때도 가장 마지막에 넣은 것부터 꺼내야합니다.그래서 우리는 이것을 가장 마지막에 넣은 것을 가장 먼저 꺼낸다 하여 후입선출이라고 표현을 합니다.  반대로 큐는 (First-In-First-Out)으로 선입선출이라고 표현을 하며스택과는 다르게 양쪽에 구멍이 뚫린..

알고리즘 2024.07.10

프로그래머스, 완주하지 못한 선수

많은 분들이 처음에 떠올렸을 것 같기도 하고 저 또한 처음에 딱 떠올랐던 방법인데 아마도 대부분 participant의 모든 값과 completion의 모든 값을 비교하여 participant에는 있지만 completion에는 없는 값을반환하는 방법으로 많이들 떠올리셨을 것 같은데 틀린 방법은 아니지만 이 문제에 해시라고 태그가 되어있는 만큼Hash함수를 이용하여 문제를 푸는 것이 문제의 요구에 맞는 것이 아닐까 싶습니다.  아래는 제가 작성한 코드입니다!~  이번 문제에서 중요한 핵심은 HashMap을 이용하여선언된 변수에다가   participant 배열의 각 값들을 할당한 값들을 map에 넣고completion배열도 똑같이 map에 넣어서 겹치는 값들을 하나씩 지워가는 것인데요  자세히 설명해보자면..

알고리즘 2024.07.10

프로그래머스, 폰켓몬

자. 문제는 이렇습니다. 친숙한 소재 포켓몬이에요. 피카츄 화이팅  그리고 바로 위는 프로그래머스에서 문제와 함께 제공하는 기본 소스인데 여기에다가추가를 하거나 수정을 하여서 문제에서 요구하는 답을 낼 수 있는 코드를 작성하시면 됩니다!  그러면 위의 코드에 대해서 간단하게 설명 및 리뷰를 해볼게요! 들어가서,  HashSet set = new HashSet(); 자바에서 많이들 사용하시는 HashSet과 HashMap 둘 중 하나인 HashSet을 사용하였는데 HashSet의 가장 큰 특징은 중복을 허용하지 않는다는 것. HashSet에 대한 자세한 설명은 직접 찾아서 보시면 도움이 많이 될 겁니다. 위 코드의 특징 중 하나는 파라미터로 정수형 배열을 입력받는 것인데요그래서 HashSet의 안에 Int..

알고리즘 2024.07.10

LEETCODE, Count Pairs Whose Sum is Less than Target

이번 문제는 간단한 방법으로 해결할 수 있습니다! 문제에 대해서 간략히 설명드리자면nums라는 배열이 주어지고 target값이 주어지고,i와 j라는 두 개의 변수를 인덱스 값으로 사용하여nums배열을 순회하면서  nums[i] + nums[j]  조건을 충족할 때마다 count변수를 1씩 증가시켜서nums배열을 다 순회하고 나서의count값을 반환하는 것입니다. ( ※ i와 j가 같은 경우는 포함하지 않습니다.) 파라미터로 nums를 배열로 받았다면nums.length;nums[i] + nums[j]를 사용했겠지만  위의 솔루션에서는 nums를 리스트로 받았기 때문에nums.size();nums.get(i) + nums.get(j)를 사용해줬습니다.

알고리즘 2024.07.10