본문 바로가기

Algorithm

(185)
프로그래머스: 단어 변환 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 주어진 begin 단어에서 시작 words 배열에서 알파벳 차이가 1개 나는 단어를 찾아 dfs로 반복하며 count + 1 함수에 들어온 단어가 target과 동일하면 이 때의 count를 답과 비교해 교체 문제에서 주어진 배열의 길이가 그렇게 길지 않기 때문에, d..
프로그래머스: 보석 쇼핑 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 풀이 전체적인 풀이 과정은 다음과 같다. 반복문을 통해 주어진 gems 속 보석의 종류 가짓수를 파악 끝구간을 0부터 끝까지 반복문으로 하나씩 더해가며 0부터 해당 위치까지의 보석 가짓수가 전체 종류와 같은지 확인 보석 가짓수와 전체 종류가 같다면 시작 인덱스를 어디까지 줄일 수 있는 지를 체크 최종적으로 주어진 시작과 끝 인덱스를 통해 길이를 계산하여 최소 길이면 답을 최신화 문제 자체에서 효율성 ..
프로그래머스: 불량 사용자 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 풀이 문제를 풀기 위한 과정은 다음과 같다. 아이디 리스트 중 차단 사용자 목록 개수 만큼 조합 생성 생성된 아이디 조합에서 모든 경우의 수를 확인하여 차단 사용자 목록과 매칭이 되는 지를 확인 (정규표현식 활용) 처음 문제 알고리즘을 작성했을 땐 단순히 재귀를 통해 무작정 banned_id와 매칭을 진행하고 결과를 반환했지만, 이 경우 문제 요구 중..
프로그래머스: 셔틀버스 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17678 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00" programmers.co.kr 풀이 문제의 답을 도출하기 위한 필요 조건은 다음과 같다. 마지막 버스의 탑승객 수 만약 탑승한 사람이 있다면, 마지막 버스의 탑승한 인원 중 마지막 시간 결국 앞선 2가지 조건을 구하기 위해 주어진 timetable을 정렬을 진행한 후, 반..
프로그래머스: 디스크 컨트롤러 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 풀이 문제의 특성 상 작업이 오는 순서대로 처리해야 하며, 그러는 와중에 작업들의 소요시간(turn around time) 합의 평균이 가장 작아야 한다. 그렇기 때문에 작업들을 모두 한 곳에 모아 정리할 수 없고, 완전탐색 처럼 모든 경우의 수를 계산하기엔 요청이 500개 가까이 되기에 시간 초과의 위험이 생긴다. 그렇다면 해답은 마치 컴퓨터의..
프로그래머스: 순위 [JAVA] 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 풀이 문제에서 요구하는 정확하게 순위를 매길 수 있는 선수는 이 선수를 이길 수 있는 승자와 이 선수에게 지는 패자의 명수 합이 n - 1이 되어야 한다. 또한 문제 요구 상 선수 a를 이긴 선수 b가, 만약 선수 c에게는 진다면 선수 a는 선수 c에게 무조건 지는 상태가 된다. 결국 선수 a를 이기는 선수들의 목록이 조건 상으로는 직접 연결이 아닌 선수 b를 통해 간접적으로 연결되기 때문에, 이를 찾기 위해선 그래프 탐색이 요구된다. 이를 해결하기 위해 처..
프로그래머스: 추석 트래픽 [JAVA] 문제 설명 https://programmers.co.kr/learn/courses/30/lessons/17676 = 0) || (ends[j].getTime() - ends[i].getTime() = 0) || (starts[j].getTime() = ends[i].getTime())) throughput1++; if ((starts[j].getTime() - starts[i].getTime() = 0) || (ends[j].getTime() - starts[i].getTime() < 1000 && ends[j].getTim..
14906번: 스러피 [JAVA] 문제 설명 https://www.acmicpc.net/problem/14906 14906번: 스러피 첫 번째 줄에는 입력될 문자열의 개수를 나타내는 정수 N이 1~10의 범위로 우선 입력된다. 다음 줄부터 N개의 문자열이 입력된다. 문자열은 1~60개의 알파벳 문자로 구성된다. www.acmicpc.net (https://www.acmicpc.net/problem/6493 또한 동일한 문제의 영어 버전이다.) 풀이 주어지는 문자열의 조건이 단순 정규 표현식 만으로 표현하기에는 무리가 있다. 문제 속 '스럼프'에 대한 문자열 조건의 경우 쉽게 "(( D | E )F+)+ G" 라는 정규 표현식으로 표현이 가능하지만, '스림프'라는 문자열 조건은 일종의 재귀 표현이 조건에 들어가기 때문에, 자바의 정규 표현..