본문 바로가기

프로그래머스19

[프로그래머스] 약수의 개수와 덧셈 문제 설명 및 예시 주어진 두 숫자 내의 숫자들 중 약수의 개수가 짝수면 그 수를 더하고, 홀수면 빼는 함수를 만드는 문제이다. 풀이 우선 약수의 개수를 세는 메서드를 하나 만들고, 주어진 숫자들 내에서 반복문을 통해 계산하는 방법을 생각했다. 1. 약수의 개수를 세는 countDivisors 메서드를 생성한다. 2. 1부터 특정 숫자까지 for문을 돌려 나머지가 0이 되게 하는 수가 존재할 때마다 count를 하나씩 늘려간다. ex) n이 6이면 1,2,3,4,5,6 중 1,2,3,6이 6과 나누어 떨어지는 약수이므로 4개를 반환할 것이다. 3. 결과를 반환할 answer 변수를 정의한다. 4. 주어진 수 left , right 내에서 반복문과 함께 앞서 정의했던 divisorCount 메서드를 호출한.. 2023. 10. 27.
[프로그래머스] 전화번호 목록 문제 설명 및 예시 주어진 배열의 원소가 다른 원소의 접두어인 경우를 판단하는 함수를 구현하는 문제이다. 풀이 접두어를 판단하는 startWith() 메서드와 HashMap을 사용하는 두 가지 풀이법으로 문제를 해결했다. 우선 startWith() 메서드를 사용한 풀이이다. 1. 효율적인 비교를 위해 배열을 길이 순으로 정렬한다. 2. 반복문으로 현재 전화번호와 그 다음 전화번호를 비교한다. (마지막 전화번호는 비교할 필요 없음) 3. *startWith() 메서드로 접두어가 존재하면 false, 그렇지 않으면 true를 반환한다. startWith()와 contains() 메서드는 유사한 것처럼 보이지만 중요한 차이점이 존재한다. A.startWith(B) : A의 접두어가 B인지 판단하는 함수. A... 2023. 10. 23.
[프로그래머스] 추억 점수 문제 설명 및 예시 주어진 name과 yearning 배열을 사용하여 name과 yearning을 매핑하고, 2차원 배열 photo를 순회하면서 그리움 점수를 합산하여 결과를 반환하는 문제이다. 풀이 name과 yearning 배열의 원소들을 매핑해야하는 점에서 HashMap 사용에 대한 힌트를 얻었다. 1. String 타입의 name, Integer 타입의 yearning 을 저장할 HashMap을 생성한다. 2. name과 yearning 배열은 길이가 같고, 원소의 순서대로 값을 할당하면 되므로 for문을 통해 HashMap에 (키,값) 쌍의 원 소를 삽입한다. 3. 최종 값을 반환할 result 배열을 생성한다. 1. 반복문을 활용하여 2차원 배열 photo의 행에 해당하는 1차원 배열 원소에서.. 2023. 10. 19.
[프로그래머스] 더한 원소들의 합 문제 설명 및 예시 주어진 문자열 중 Z가 있다면 Z 바로 전에 나온 숫자를 제외하고 나머지 숫자를 연산하는 문제이다. 풀이 단순 반복문과 조건문으로 코드를 작성하다가 Stack을 사용하면 효율적으로 해결할 수 있지 않을까? 생각했다. 마침 얼마 전에 Stack에 대해 공부하고 포스팅을 했으니 문제에 대입해보기로 하였다. 1. 연산을 위해 Integer 타입의 Stack을 생성한다. 2. 공백을 기준으로 나눈 문자열 s에서 반복문을 활용하여 "Z"를 만나면 stack.pop()으로 *최상위 스택 요소를 제거한다. "Z"가 아니라면 Stack에 요소를 삽입한다. * Z 바로 전에 나온 숫자를 제거해야 하므로 stack.pop() 메서드가 적절하다. 3. "Z"와 "Z" 전에 나온 숫자를 제거한 나머지 요소.. 2023. 10. 17.
[프로그래머스] 진료순서 정하기 문제 설명 및 예시 주어진 배열의 원소들을 응급도의 내림차순으로 재배치한 배열로 반환하는 함수를 완성하는 문제이다. 풀이 원본 배열을 복사 후 응급도가 높은 순서대로 순위를 부여하는 방법으로 문제를 해결하려했다. 이번에는 Arrays.binarySearch(array, key) 라는 메서드를 활용하여 문제를 풀 수 있었다. 1. 정답으로 제시할 배열의 길이를 원본 배열의 길이와 똑같이 설정해준다. *index 오류 방지 2. 원본 배열을 복사 후 응급도를 내림차순으로 정렬해준다. 3. 반복문과 Arrays.binarySearch(array, key)를 활용하여 원본 배열의 위치를 찾는다. *Arrays.binarySearch(array, key) 주어진 배열 array에서 특정 요소 key의 위치를 찾는.. 2023. 10. 16.
[프로그래머스] A로 B 만들기 문제 설명 및 예시 두 문자열이 주어지고 before의 재조합으로 after를 만들 수 있으면 1 , 그렇지 않으면 0을 반환하는 함수를 완성해야 한다. 풀이 문제를 보자마자 정렬을 활용하면 되지 않나? 생각했다. before와 after 문자열의 순서는 각각 다르다해도, 정렬 후 비교하면 재조합하여 일치한지 알 수 있을테니 말이다. 1. 두 문자열을 각각 char 배열로 변환해준다. *toCharArray() 메서드 활용 2. 두 배열을 각각 정렬해준다. 3. 정렬한 배열을 비교해서 동일하다면 1을 반환하는 함수를 작성한다. 동일하지 않다면 순서를 어떤 식으로 바꾸던 간에 두 문자열은 같아질 수 없기 때문이다. 정렬 활용을 캐치하여 금방 해결했던 문제. toCharArray() 메서드와 Arrays.e.. 2023. 10. 16.
[프로그래머스] 중복된 문자 제거 문제 설명 및 예시 문자열에서 중복된 문자를 하나만 남겨 반환하는 함수를 완성하는 문제이다. 풀이 중복 제거 방법에 대해 고민하다가 반복문이나 조건문을 활용한 방법이 아닌 다른 방법을 활용한 코드를 작성하고 싶었다. 구글링을 하다가 distinct() 메서드를 알게 되어 문제에 적용해보기로 했다. 1. 문자열을 chars() 메서드로 IntStream으로 변환한다. *반복문보다 간결하고 가독성 좋게 활용 가능하다고 한다. 2. distinct() 메서드로 중복된 요소를 제거한다. *중복된 요소 중 하나만 남긴 후 스트림으로 반환한다. 3. mapToObj() 메서드를 사용하여 스트림의 각 요소를 변환한다. 4. Collectors.joining() 메서드를 사용하여 스트림의 각 요소를 문자열로 결합한다... 2023. 10. 16.
[프로그래머스] 369 게임 문제 설명 및 예시 우리에게 익숙한 369 게임을 주제로 한 문제이다. 말해야 하는 숫자에 따라 몇 번의 박수를 쳐야 하는지 구하는 함수를 완성하는게 목적이다. 풀이 주어진 숫자에 3, 6, 9 가 들어간 횟수만큼 박수 횟수를 증가하는 함수를 생성하면 되지 않을까 생각했다. 예를 들어 369가 주어진다면 박수 3번, 예시처럼 29423이면 9와 3이 포함되므로 2번을 반환해야 한다. 그러기 위해서는 반복문과 조건문을 같이 활용하여 자릿수마다 판단해야 하므로 문자열로 변환한 후 적용해보기로 했다. 1. Integer.toString() 함수로 주어진 숫자를 문자열로 바꾼다. 2. toCharArray() 함수로 문자열에 반복문과 조건문을 같이 사용하여 3,6,9중 하나가 포함되어 있으면 박수 횟수를 증가한.. 2023. 10. 16.
[프로그래머스] 최댓값 만들기 (2) 문제 설명 및 예시 주어진 배열의 원소 중 두 개를 곱한 최댓값을 반환하는 함수를 작성하는 문제이다. 풀이 1. 우선 배열의 원소를 오름차순으로 정렬한다. 2. 배열의 길이를 구한다. 3. 배열에 음수가 포함될 수 있으므로 가장 작은 음수끼리의 곱 , 가장 큰 양수끼리의 곱을 비교해 최댓값을 반환해야한다. 4. 배열 길이를 활용해 가장 큰 두 개의 양수 (마지막 원소, 그 전 원소)를 곱한 값과 가장 작은 두 개의 음수 (첫 번째 원소, 두 번째 원소)를 곱한 값 중 큰 값을 반환한다. *Math.max() 함수 활용 최댓값을 구하는 문제는 흔히 볼 수 있고 익숙하지만 이번 문제는 음수까지 고려해야하는게 포인트라고 생각한다. 배열의 정렬과 Math.max()함수를 활용하면 어렵지 않게 해결할 수 있는 문.. 2023. 10. 16.