코딩문제풀이/프로그래머스 55

[Java] 프로그래머스 : 순위 검색

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이 과정 처음엔 시간 계산안하고 풀어서 효율성에서 딱걸렸다. (info의 크기) x (query의 크기)는 50억으로 2중 반복문 도는 순간 무조건 효율성에서 걸린다. 따라서 메모리를 좀 더 쓰더라도 (info의 크기) + (query의 크기)가 되도록 해야한다. 구체적인 프로세스는 아래와 같다. 1) info를 돌면서, 모든 가능한 경우를 Key값으로, 점수를 Value로 한다..

[Java] 프로그래머스 : 거리두기 확인하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 위쪽 방향은 이미 다 탐색했으므로 또 확인할 필요 없이 3방향 탐색하면서, (거리가 2 초과)거나 (범위)를 벗어나거나 (파티션이 있을 경우) 더이상 탐색을 하지 않고 종료한다. 이때, 거리가 2이하인데, 'P'가 있는 경우 답은 0으로 체크하고 더 이상 탐색하지 않는다. +) 처음엔 DFS를 떠올렸는데, 구체적인 해결 방안을 생각해내는 데 시간이 걸렸다.. 알고리즘은 꾸준히 푸는..

[Java] 프로그래머스 : 가장 큰 수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 처음 생각했던 방법은 숫자들의 자리 수를 다 맞추는 것을 생각했는데, 3442, 33 일 때는 3442 > 3300으로 제대로 적용되나 3223, 32일 때는 3223 > 3200이지만 322332보다 323223이 더 크게 되어 원하는 결과를 도출할 수 없었다. 그래서 다른 사람의 코드를 대략적으로 보고난 후, 좀 더 직관적으로 생각해서, 두 숫자 중 어..

[Java] 프로그래머스 : 로또의 최고 순위와 최저 순위

문제 https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 당첨된 번호를 index로 사용하여 boolean배열에 true로 표기한다. answer는 등수를 가리키며, 최고 순위는지워진 수가 모두 맞았을 때이고 최저 순위는 지워진 수가 모두 틀렸을 때이므로 최저순위 - (0의 개수)를 하면 최고 순위를 계산할 수 있다. class Solution { public int[] solution(int[] lottos, ..

[Java] 프로그래머스 : 퍼즐 조각 채우기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/84021 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 1. BFS 탐색으로 퍼즐(remove를 쓰기 위해 LinkedList를 사용)과 빈 칸을 각각 분석한다. 1-1. 블럭의 가장 위쪽에서 가장 왼쪽에 있는 블럭을 (0, 0)으로 맞추어 블럭들의 좌표를 변경한다. - setCenter메서드 2. 각 빈칸에 퍼즐을 넣을 수 있는 지 검사한다. 2-1. 개수가 다르면 return false; 2-2. 개수가 같으면 회전시켜가면서 넣을 ..

[Java] 프로그래머스 : 프린터

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 우선 순위가 1~9까지 있고, 문서가 1~100까지이다. 따라서 문서를 우선순위에 따라 정렬하지 않고, int 1차원 배열에 각 우선 순위가 몇 개 있는지 표시하였다. 그리고나서 우선순위를 9부터 1까지 차례로 탐색하면서, 해당 우선순위를 가진 문서가 1개 이상이면 queue에서 찾도록 했다. import java.util.*; class Solution { public int s..

[Java] 프로그래머스 : 모음사전

문제 https://school.programmers.co.kr/learn/courses/30/lessons/84512 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 처음엔 AEIOU 순서대로 DFS방식을 통해 사전순대로 읽어가면서 해당 문자열을 만나면 return하는 방식이 떠올랐다. 그런데, 굳이 순서대로 다 탐색하는 것보다 몇 번째인지 바로 계산할 수 있는 방식이 있어서 이 방식으로 구현했다. 원래는 O(N)만큼 걸리는 알고리즘을 O(1)으로 구현할 수 있는 것이다. 수식 : 5^(length("AEIOU")-1-i) + sum(1*5^(..

[Java] 프로그래머스 : 양궁대회

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이과정 1. 점수를 얻기 위한 최소 화살의 수를 계산하여 저장 + 남은 건 다 0에 넣는다. - 같은 점수면 낮은 점수에 화살이 많은 것을 선택하기 때문에 개수가 딱 떨어지지 않으면 0으로 넣는다. - 비트마스킹으로 낮은 점수에 화살이 많은 것을 구분한다. 2. dfs로 최대 점수를 계산한다. - 어피치의 점수를 뺏은 경우 2배로 얻는다. class Solution { int l..

[Java] 프로그래머스 : 불량 사용자*

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이 과정 요약 : Brute force(DFS), 집합, 비트마스킹 1. banned_id별로 가능한 user_id를 넣는다. (여기는 자료형 딱히 상관없을 것 같다.) 2. 배열의 크기가 8이하 => 비트마스킹 가능 3. 방문 체크한 int변수를 집합에 넣어서, 중복 검사를 한다. +) 문자열 비교(banned_id & user_id) 정규표현식에 익숙하지 않아서 로직을 직접..

[Java] 프로그래머스 : 주차 요금 계산

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이 과정 HashMap에 을 기록한다. - 입/출차 기록 : 입차할 때는 +1, 출차할 때는 -1을 해서 마지막에 요금을 계산할 때 1이면 23:59분으로 출차! - 총_시간 : 입차할 때는 -minute, 출차할 때는 +minute으로 총 시간을 계산한다. Key들을 정렬해서, 차례대로 가격을 계산해서 결과를 출력한다. import java.util.*; class Soluti..