본문 바로가기
반응형

알고리즘 문제 풀이/프로그래머스18

네트워크 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 문제가 잘 이해가 안되었었는데, 컴퓨터가 하나의 선으로 연결되어 있어야지만 1개의 네트워크로 인정된다. 즉, 아래의 경우는 2개의 네트워크가 된다. 컴퓨터 한 대가 어디까지 연결되어 있는지 끝까지 탐색해야 하므로, 깊이 우선 탐색인 DFS 를 사용했다. DFS 는 재귀나 Stack 을 이용해서 풀 수 있는데 나는 재귀를 이용했다. 코드 public class Solution { public static final int CONNECT = 1; public int solution(int n, int[][] computers) { int answer = 0; boolean[] visited = new boolean[n]; for (int i = .. 2023. 3. 10.
2019 카카오 개발자 겨울 인턴십 튜플 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 처음에 문제가 잘 이해가 안가서 문제 이해하는데 시간을 많이 썼는데, 아래와 같이 생각하니까 너무 쉬운 문제였다. "{{2},{2,1},{2,1,3},{2,1,3,4}}" 위와같이 s 값이 들어온다면, 괄호마다 포함되는 숫자가 많을수록 앞의 숫자라는 말이된다. 숫자가 포함되는 횟수를 계산하면 아래와 같다. 2 : 4번 1 : 3번 3 : 2번 4 : 1번 가장 많은 순으로 내림차순하게 된다면 그 값이 정답이 된다. 정답 : [2, 1, 3, 4] 코드 import java.util.*; public class Solution { public int[] solution(String s) { String[] textNumbers = removeB.. 2022. 8. 10.
2021 카카오 채용연계형 인턴십 거리두기 확인하기 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 문제를 보고 bfs 로 너비 탐색을 하면서 풀면 되겠다 싶었다. 배열을 순회하면서 해당 값이 사람(P) 인 경우에만 bfs 메서드를 실행하게 한다. 핵심 코드는 bfs 메서드라 해당 부분만 설명하자면 아래와 같다. // 상, 하, 좌, 우 탐색 private static final int[] X_DIR = {-1, 1, 0, 0}; private static final int[] Y_DIR = {0, 0, -1, 1}; private final String PERSON = "P"; private final String PARTITION = "X"; ... private boolean bfs(int x, int y, String[][] plac.. 2022. 8. 6.
2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 다중 집합에서 중복 제거를 어떻게 해야할까? 에 대해서 이해가 잘 안되어서 시간이 오래걸렸는데, 아래와 같이 생각하니까 이해하기 쉬웠다. 만약 A = {1, 2, 3}, B = {1, 1, 1, 4} 라고 한다면, A 와 B 의 교집합은 {1} 이 되며, A 와 B 의 합집합은 {1, 1, 1, 2, 3, 4} 가 된다. 왜 저렇게 되지? 라고 생각이 들텐데.. 아래와 같이 이해하면 쉽다. 맨 처음 값을 비교하여 값이 같다면 교집합에 1을 추가해준다. 그리고 해당 값 중 하나를 제거한다. 그리고 다음 값을 비교한다. 값이 같지 않으므로 넘어간다. 이런식으로 모든 값을 순회하면서 체크하게 되면, 중복되는 값이 제거되게 된다. 여기서 주의할 점이.. 2022. 8. 3.
2020 KAKAO BLIND RECRUITMENT 괄호 변환 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 과정을 다시 살펴보면서 하나하나 구현해나가면 쉽게 풀 수 있다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다. 4-2. 문자열 v에 대해 1단계부터 재귀적으.. 2022. 7. 28.
[1차] 다트게임 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 문자열을 세트(점수, 보너스, 옵션) 별로 구분하면 문제를 쉽게 풀 수 있다. 아래와 같이 세트별로 나누는 toSplitText 메서드를 추가했다. private String[] toSplitText(String dartResult) { StringBuilder sb = new StringBuilder(); sb.append(dartResult.charAt(0)); int startIndex = 1; // 숫자가 10 인경우 if (isNumber(dartResult.charAt(1))) { sb.append(dartResult.charAt(1)); startIndex = 2; } sb.append(" "); for (int i = start.. 2022. 7. 17.