💡Problem Solving/Programmers 72

[프로그래머스] 단어 변환 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 풀이 DFS 알고리즘을 이용해서 풀었다. 중복 체크는 HashSet을 사용하였다. dfs 함수 호출 후, 다시 visitied에 해당 값을 제거해줘야 한다. 소스코드 import java.util.*; import java.lang.*; class Solution { public int answer; public ..

[프로그래머스] 합승 택시 요금 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 풀이 S지점에서 X라는 지점에 도착해서 X->A, X->B 로 갈라진다. 즉,..

[프로그래머스] 멀리 뛰기 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/12914# 코딩테스트 연습 - 멀리 뛰기 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2 programmers.co.kr 풀이 완전 탐색으로 풀면 시간 초과가 발생한다. 가만 보니 2 x n 타일링 문제와 동일하다. 아래 문제에서 세로 타일 한개를 1칸, 가로타일 두 개를 2칸으로 해당 문제에 대입할 수 있다. DP문제로 점화식을 이용해서 풀 수 있다. 2021.10.29 - [Alogirthm/Programmers]..

[프로그래머스] 입국심사 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/43238# 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 풀이 이분탐색을 이용해서 풀어야 하는 문제이다. 결과 값이 크기 때문에 타입에 유의해야 한다. 아래와 같이 초기화 한다. 심사의 최대 시간 = 최소 심사시간 * n 심사의 최소 시간 = 최소 심사시간 그리고 이분탐색을 진행한다. mid값을 총 걸리는 시간이라고 가정한다면, mid값/심사시간 = 해당 심사관이 심사하는 사람의 수가 된다. 그리고 모든 심사관의..

[프로그래머스] 2 x n 타일링 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 풀이 DP 방식으로 풀 수 있다. 코드는 정말 간단한데 점화식을 세우는 게 쉽지 않다. 타일이 가로로 끝나는 것과 세로로 끝나는 것을 분류해보면 아래와 같다. 가로길이가 i일 때, 타일링의 경우의 수는 = i-1의 경우의 수와 i-2의 경우의 수를 합한 것이다. i-1의 경우의 수에서 세로 타일을 붙임 i-2의 경우의 수에서 가로 타일을 붙임 ..

[프로그래머스] 야근 지수 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/12927 코딩테스트 연습 - 야근 지수 회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도 programmers.co.kr 풀이 Level3 이지만 체감 난이도는 Level1 느낌이다. 1. 모든 work를 최대힙에 담는다. 2. 야근 시간만큼 순회하면서 최대값을 가지는 원소를 poll하여 -1 한후 다시 offer하였다. 3. 이후 queue에 남은 원소를 제곱하여 합계를 내었다. 소스코드 import java.util.*; import java.lang.*; ..

[프로그래머스] 추석 트래픽 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/17676# = time-1000+1 && req 0) return 1; else if(o1 - o2 < 0) return -1; else return 0; } }); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); for(int i = 0; i < lines.length; i++){ // Time으로 변환해서 첫시간, 끝시간을 PriorityQueue에 담아준다. // 그리고 두 시간을 가지는 Process를 생성해준다. String s = lines[i]; String date = s.substring(0, 23); long m..

[프로그래머스] 문자열 압축 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 풀이 그냥 이중 반복으로 구현해서 풀었다. 바깥쪽 반복문의 인덱스는 unit(자르는 단위의 개수)이다. 내부는 while문을 추가해서 인덱스를 unit만큼 증가시키면서 현재와 이전 문자열을 비교해서 count를 계산하였다. 소스코드(JAVA) import java.util.*; class Solution { public int solution(Str..

[프로그래머스] N진수 게임 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/17687 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr #풀이 N진수 변환 함수를 한참 구현하고 제출했는데 절반 정도가 틀렸다. 찾아보니 Java 자체에서 N진수 변환 기능이 있어서 해당 함수로 바꿨더니 잘된다. Integer.toString(int num, int N진법) 요렇게 넣으면 해당 진수가 리턴된다. 코딩 문제에서 진수 변환할 일이 많은데 알아두면 좋을 것 같다. #소스코드 clas..

[프로그래머스] 프렌즈4블록 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr #풀이 순서대로 배열을 체크해서 풀었다. 블록을 2차배열에 저장하고, 인덱스의 우측, 아래쪽, 대각선우측을 체크하여 삭제할 인덱스를 리스트에 담아둔다. 삭제할 리스트의 크기가 0이면 while문을 빠져나온다. 삭제할 블록이 있다면 한꺼번에 공백으로 바꿔준다. 이후 블록을 체크하면서 현재 블록의 밑 블록이 비어 있는지 체크하여, 블록..