코딩 테스트/프로그래머스
프로그래머스 - 거리두기 확인하기 문제(자바)
https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr BFS를 이용하여 풀면되는 문제로 사람 위치의 기준 상하좌우의 맨해튼 거리는 1 사람으로 ..
프로그래머스 - 서울에서 김서방 찾기 (자바)
https://programmers.co.kr/learn/courses/30/lessons/12919 코딩테스트 연습 - 서울에서 김서방 찾기 String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니 programmers.co.kr 굉장히 쉬운 코드인데 글을 쓰게 된 이유는 문자열을 다루는데 기억해야하는게 있어서 입니다. 1. 문자열을 +로 붙히기 class Solution { public String solution(String[] seoul) { int kimIdx = getTargetNameIdx(seoul,"..
프로그래머스 - 다트 게임 문제 (자바)
https://programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 굉장히 단순하게 풀이한 문제로 리팩토링을 통해서 조금더 코드를 다듬을 수 있을거 같지만 일단 글을 쓸려고 합니다.ㅎ 기본적으로 숫자면 stack에 넣고 문자일 경우 문자별 처리를 다르게 가져가서 처리했습니다. 주의할 점으로 숫자가 10까지 있어서 10인 경우 check가 필요하다는 점 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. 즉 stack에 값이 하나 밖에 없는데 스타상이 나온 경우를 신경 써야 한다는 점 import java.util.Stack; // 프로그래머스 다트 ..
프로그래머스 - 110 옮기기 문제 (자바)
https://programmers.co.kr/learn/courses/30/lessons/77886 코딩테스트 연습 - 110 옮기기 0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를 programmers.co.kr 무슨 알고리즘을 사용해야하는 거지라는 생각과 고민 끝에 다른 사람으 코드를 보고 이해한 문제로 1. 문자에서 110이 나오는 경우 카운트를 세고 stack에는 담지 않는다. 2. stack에서 0이 나오기 직전 위치를 잡는다. 3. 0 직전 위치를 기준으로 110을 카운트한 개수 만큼 넣어준다. ex) 0111111010 -> stack ..
프로그래머스 - 숫자 게임 문제 (자바)
https://programmers.co.kr/learn/courses/30/lessons/12987 코딩테스트 연습 - 숫자 게임 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 programmers.co.kr 왜 3단계에 있지 하는 문제 A의 각 값들을 최소한의 차이로 이기도록 B의 사람을 내보내고 숫자를 세면 끝나는데 A [5,1,3,7], B [2,2,6,8] 우선 두배열을 정렬한다. A[1, 3, 5, 7], B[2, 2, 6, 8] 앞에서 부터 비교를 하는데 B의 값이 큰 경우 점수 1점 획득 및 다음 A 와 비교하도록 aIndex++; 하면 끝..
프로그래머스 셔틀버스 문제 (자바)
크루들을 우선순위 큐에 전부 집어놓고 버스 도착 시간마다 큐에서 버스에 탑승 가능한 인원만큼 빼고는 방법으로 계산하면 된다. 중요한점은 세가지 정도로 1 . 문자열의 시간을 숫자로 변경해서 계산하기 편하게 만들기 2. 마지막에 탑승한 사람 - 1분이 도착해야하는 사람임으로 탑승할때 마다 해당 값을 적용 3. 마지막 버스에 자리가 남는 경우는 해당 버스 도착 시간에 맞춰서 나가면 된다. ps 처음에는 숫자를 문자로 변경할때 3항연산자 2개를 사용했는데 String.format() 메서드를 사용하면 편하다. import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; // 프로그래머스 셔틀버스 문제 class Soluti..
프로그래머스 - N개의 최소공배수 문제 (자바)
https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 첫번째 값과 두번째 값의 최소공배수를 구하고 해당 최소공배수와 세번째 값의 초소공배수를 구하는 방법으로 마지막 값까지 구하면 되는 문제 최대 공배수를 유클리드 호제법을 통해서 구하고 이를 통해서 최소 공배수를 구하면 해결된다. class Solution { public int solution(int[] arr) { in..
프로그래머스 - 압축 문제 (자바)
https://programmers.co.kr/learn/courses/30/lessons/17684 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 사실 본인은 아래 코드 처럼 깔끔하게 코딩을 하지 못했다. 풀고나서 다른 사람 풀이를 보고 정리한 상태이다. 간단하게 이해해보자면 기존 알파벳을 전부 등록하고 문자열을 2개 씩 붙혀가면서 비교한다. 과정에서 고려해야하는 것은 반복문 중에 index가 마지막 위치까지 오는 경우이다. import java.util.ArrayList; import java.util.HashMap; // 프..