Algorithm/Programmers 48

[프로그래머스] 카카오프렌즈 컬러링북 - Java

문제 설명 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 풀이 회고 해당 문제는 DFS를 통해 해결할 수 있었습니다. 우선 해당 문제에서 요구하는 것은 '그림의 영역 개수'와 '가장 큰 영역의 칸수'입니다. 이를 구하기 위해 문제에 접근한 방식으로는 다음과 같습니다. 1. 주어진 2차원 배열을 차례대로 순회한다. 2. 방문되지 않은 색칠된 영역이라면(배열 요소 값이 0이 아닌 경우) 해당 색의 영역을 DFS 탐색한다.(영역 칸수 카운팅) 3. '2번'에서 모든 탐색을 마친 후 다음 요소 값을 기준으로 다시 D..

[프로그래머스] H-Index - Java

문제 설명 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 풀이 회고 우선 해당 문제는 문제를 잘못 이해함으로 인해 삽질하는 시간이 많았습니다. 문제에서 요구하는 것은 "논문 n편 중, h번 이상 인용된 논문이 h편 이상일 때 h의 최대값"을 구하는 것입니다. 이때 h라는 수의 범위는 무엇일까요? 저는 처음에 이 문제의 h라는 수가 매개변수(citations)로 주어진 배열에 존재하는 정수 중에 존재한다고 착각하고 있었습니다. 하지만 이에 대한 풀이를 확실하게 구해도 정답이 나..

[프로그래머스] 전화번호 목록 - Java

문제 설명 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 풀이 소스 코드 : Fail(시간초과) class Solution { public boolean solution(String[] phone_book) { boolean answer = true; boolean flag = false; for (int i = 0; i < phone_book.length - 1; i++) { for (int j = i + 1; j < phone_book.length; j++) { if (phone_book[j].len..

[프로그래머스] 위장 - Java(Feat. 삽질 주의)

문제 설명 코딩테스트 연습 - 위장 programmers.co.kr 풀이 회고 이번 문제는 오랫동안 고민하다가 결국에는 힌트(Hint)를 보고야 말았습니다. 먼저 이 문제를 해결하기 위한 당초 저의 접근 방법은 옷을 1개만 선택하는 경우, 2개만 선택하는 경우, 3개만 선택하는 경우(최대 옷의 종류의 개수) 등 각각의 경우별로 옷을 "조합(combination)"할 수 있는 모든 경우의 수를 구하고자 했었습니다. 문제에서 주어진 예시에 적용해보면 다음과 같습니다. 문제 설명에서 주어진 입출력 예시들 한해서는 위와 같은 접근 방법으로 간신히 "구현"할 수는 있었습니다. 다만, 구현하면서도 소스 코드가 점점 길어지는 것을 보면서 "지금 뭔가 잘못되어가고 있다는 것"을 본능적으로 느낄 수 있었습니다... 😇 ..

[프로그래머스] 주식가격 - Java

문제 설명 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 풀이 : Success 소스 코드 public int[] solution(int[] prices) { int[] answer = new int[prices.length]; int second, price, lastTime = prices.length - 1; for (int i = 0; i < lastTime; i++) { price = prices[i]; second = 1; for (int j = i + 1..