본문 바로가기

프로그래머스(Java)

(192)
[프로그래머스] 프로세스 문제 풀이 힌트문제 이해:대기 큐에 있는 프로세스들의 우선순위에 따라 순서대로 실행됩니다.몇 번째에서 실행되는지 알고 싶을 때.우선순위 관리:우선순위가 높은 프로세스가 먼저 실행됩니다. 이를 위해 우선순위 배열을 정렬하여 가장 높은 우선순위를 찾습니다.큐(Queue) 사용:큐는 먼저 들어온 것이 먼저 나가는 구조입니다. 큐(Queue)를 모르신다면 문제 풀기 전에 보고 오시는 것을 추천합니다.큐를 사용하여 프로세스의 우선순위를 관리합니다.로직 설명:가장 높은 우선순위의 프로세스가 실행될 때마다 출력 순서를 증가시키고, 타겟 프로세스의 인덱스를 감소시킵니다.타겟 프로세스가 실행되면 그때까지의 출력 순서를 반환합니다.만약 현재 프로세스가 가장 높은 우선순위가 아니라면, 해당 프로세스를 큐의 맨 뒤로 이동시켜..
[프로그래머스] 신규 아이디 추천 힌트정규식을 활용이 문제를 쉽게 풀기 위해서는 정규식과 replaceAll() 메서드를 잘 활용해야 합니다. 정규식을 통해 문자열을 간편하게 수정할 수 있습니다.규칙의 순서대로 풀기코드의 순서를 규칙에 맞게 작성해야 합니다. 1단계부터 7단계까지 주어진 규칙을 순서대로 처리하지 않으면 오류가 발생할 가능성이 높습니다. 각 단계를 정확히 이해하고 차례로 적용하세요. 정답은 더보기 클릭 더보기class Solution { public String solution(String new_id) { // 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. String result = new_id.toLowerCase(); // 2..
[프로그래머스] 체육복 코드 힌트 학생 배열 초기화:모든 학생의 체육복 개수를 저장할 배열을 생성하고, 각 요소를 1로 초기화합니다.배열을 초기화하는 방법으로 for문을 사용해 각 요소에 1을 넣거나, Arrays.fill(배열, 1)을 사용할 수 있습니다.잃어버린 체육복 반영:lost 배열을 순회하며, 해당 학생의 체육복 개수를 1 감소시킵니다.여벌 체육복 반영:reserve 배열을 순회하며, 해당 학생의 체육복 개수를 1 증가시킵니다.체육복 빌려주기:학생 배열을 순회하며, 체육복이 2개인 학생을 찾습니다.해당 학생의 왼쪽 또는 오른쪽 학생이 체육복이 없는 경우, 체육복을 빌려줍니다.체육복을 가진 학생 수 계산:학생 배열을 순회하며, 체육복을 가지고 있는 학생 수를 계산하여 result에 저장합니다.  정답은 더보기 클릭더보..
[프로그래머스] 특별한 이차원 배열2 2중 for문 사용하기for (int i = 0; i arr[i][j] 와 arr[j][i] 비교하기다르다면 false 또는 0을 반환하기 이 문제의 목표는 주어진 2차원 배열이 대칭인지 확인하는 것입니다. 대칭이란, 배열의 요소 arr[i][j]와 arr[j][i]가 항상 동일해야 함을 의미합니다. 이 특성을 확인하기 위해 2중 for문을 사용하여 모든 요소를 순회하면서 비교합니다.만약 한 쌍이라도 다른 값이 발견되면, 배열은 대칭이 아니므로 0을 반환하고, 모든 비교가 통과되면 1을 반환합니다.  정답은 더보기 클릭더보기class Solution { public int solution(int[][] arr) { // 2차원 배열의 모든 요소를 확인하기 위한 2중 for문 ..
[프로그래머스] 멀리뛰기 n의 경우의 수:n = 1일 때: 1가지 경우의 수 (1)n = 2일 때: 2가지 경우의 수 (1, 1), (2)n = 3일 때: 3가지 경우의 수 (1, 1, 1), (1, 2), (2, 1)n = 4일 때: 5가지 경우의 수 (1, 1, 1, 1), (1, 1, 2), (1, 2, 1), (2, 1, 1), (2, 2)n = 5일 때: 8가지 경우의 수 (1, 1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 1), (1, 2, 2), (2, 1, 2), (2, 2, 1)여기서 규칙을 발견할 수 있습니다:n의 경우의 수는 (n-1)의 경우의 수 + (n-2)의 경우의 수입니다.즉, 이 문제는 피보나치 수열 문제라는 것입니다.피보나치란?..
[프로그래머스] 안전지대 문제 풀이 힌트:이중 for 문을 사용하여 보드의 각 위치 (i, j)에 있는 요소가 0인지 확인합니다. 그리고 인접한 모든 요소들이 0인지를 검사하여 모두 0일 때 해당 위치를 안전지대라고 할 수 있습니다.이 힌트를 보러 오신 분들은 아마 인접한 요소들을 탐색하는 방법을 잘 모르기 때문일 것입니다. 예를 들어, (0, 0) 위치에서는 (0, 0), (0, 1), (1, 0), (1, 1)만 비교하면 되지만, (1, 1) 위치에서는 (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2) 총 9개를 비교해야 하기 때문입니다.안전한지를 확인하는 방법:다른 사람들의 코드와 비교해보면 크게 3가지의 접근 방식이 있습니다.정직하게 모든 경우의..
[프로그래머스] 접미사 배열 코드 힌트:접미사를 가지고 오는 방법은 2가지가 있습니다 1. 역순으로 문자열에서 접미사 추출:문자열을 역순으로 순회하면서 각 인덱스에서부터 문자를 하나씩 가져오는 방법입니다.2. 순서대로 접미사 추출:문자열을 순서대로 탐색하면서 substring() 메서드를 사용하여 접미사를 추출하는 방법입니다.저는 substring을 추천합니다( 처리 속도와 메모리 사용량 면에서도 효율적이라는 장점이 있습니다. )역순으로 꺼내기for (int i = my_string.length()-1; i >= 0; i--) { my_string.charAt(i)를 사용하여 해당 값을 꺼냅니다}substring을 사용하여 자르기for (int i = 0; i 정렬: Arrays.sort() 메서드를 사용하여 문자열 배열을 사..
[프로그래머스] 약수의 합 문제 설명: 주어진 숫자 n의 모든 약수들의 합을 구하는 문제입니다. 예를 들어, n이 12일 때 약수는 1, 2, 3, 4, 6, 12이며, 이들의 합은 28입니다.약수를 구하는 방법: 약수의 공통점은 n % i == 0이라는 것입니다. 예를 들어, 12의 약수들을 보면 다음과 같습니다:12 % 1 == 012 % 2 == 012 % 3 == 012 % 4 == 012 % 6 == 012 % 12 == 0즉, n의 약수를 구하기 위해 1부터 n까지의 수를 반복하면서 n % i == 0인 i를 찾으면 됩니다.이를 코드로 구현하면 다음과 같습니다:for (int i = 1; i  더 효율적인 방법: 위의 방법은 1부터 n까지 모두 반복하기 때문에 비효율적일 수 있습니다. 약수의 또 다른 특징을 이용해 더 ..