본문 바로가기

CS/알고리즘

(6)
[프로그래머스] 위클리 챌린지 7주차 - 입실 퇴실 문제 문제 보기 풀이 #Set #HashSet 회의실(room)은 사람들이 모이는 공간이지만 순서와 상관없이 출입이 가능합니다. 이런 특징은 Set을 회의실로 구현이 가능합니다. #Queue #LinkedList 입실 명부(inList), 퇴실 명부(outList) 명부에 적힌 순서에 따라 인원들이 입, 퇴실해야 합니다. 순서가 중요하기 때문에, 각 명부를 Queue로 구현합니다. 문제에서 주어진 상황인 반드시 만난 사람을 구하는 상황은 회의실에 입실한 사람이 퇴실할 수 있을 때 무조건 퇴실하는 상황입니다. 퇴실 queue의 front 인원이 회의실에 있다면 room에서 나가도록 하고, 입실 queue의 front 인원을 회의실에 입실시키도록 합니다. #Map #HashMap 각 사람별로 반드시 만난 사..
[프로그래머스] 위클리 챌린지 6주차 - 복서 정렬하기 문제 문제 보기 풀이 복서들의 정보를 가지고 문제에서 제시된 조건으로 정렬합니다. 동점자인 경우의 정렬기준이 3가지 있습니다. 번호, 승률, 몸무게가 많은사람을 이긴 횟수, 몸무게를 필드값으로 가지는 Boxer 클래스를 생성합니다. Boxer list를 정렬할 때 Comparator 익명 구현체로 문제에 주어진 상황에 맞게 정렬합니다. 소스코드 github import java.util.*; class Solution { public int[] solution(int[] weights, String[] head2head) { List boxers = new ArrayList(); int N = weights.length; for (int i = 0; i < N; i++) { int totalGameCnt..
[BOJ] 5430번 : AC - Java 문제 백준 풀이 RDD 4 [1,2,3,4] R(배열 뒤집기) 또는 D(앞쪽 숫자 제거)로 구성된 작업을 [1,2,3,4] 배열에 순차적으로 적용한 결과를 얻는 문제다. 중요한 부분이 2가지 있다. 입력데이터를 적절한 데이터로 변환 작업 수행을 얼마나 효율적으로 진행할 것인가? 1. 입력데이터를 적절한 데이터로 변환 R 또는 D로 구성된 작업 리스트는 toCharArray로 문자 배열로 변환했다. [1,2,3,4] 형식을 배열로 변환해야 한다. 앞뒤 '[', ']'는 고정이므로 substring으로 앞뒤 한 칸씩 뺀 문자열을 얻고, split으로 콤마(,)를 기준으로 나눠주면 온전한 숫자 부분만 얻을 수 있다. 2. 작업 수행을 얼마나 효율적으로 진행할 것인가? 작업이 배열을 뒤집거나 가장 앞쪽 원소를 ..
[프로그래머스] 카카오프렌즈 컬리링북 문제 https://programmers.co.kr/learn/courses/30/lessons/1829 풀이 색깔 영역 갯수와 가장 큰 영역의 넓이를 계산해야한다. DFS 방식으로 해결했다. 같은 색깔 영역을 깊이 탐색으로 조사하여, 영역의 넓이까지 계산한다. 한 영역을 탐색하는 과정은 아래와 같다. - 한 블럭에 들어간다 -> 탐색 색깔로 지정한다 -> (위 or 아래 or 왼 or 오른쪽 블럭에 들어간다. -> 탐색 색깔과 같은 색깔인지 확인한다) 여길 반복 picture가 가질 수 있는 값에 -1을 추가해서 탐색완료된 영역에 대한 정보를 갖도록 했다. picture의 값은 아래와 같이 값을 가질 수 있다. 0 : 색칠하지 않는 영역(문제 정의) 1 이상 : 숫자별로 하나의 색깔을 의미(문제 정의)..
[프로그래머스] 위클리 챌린지 1주차 - 상호 평가 2주 차 문제가 쉬워서 1주 차 풀었는데 1주 차는 더 쉽다. 문제 문제 보기 풀이 필요한 놀이기구 이용 금액을 for를 이용하지 않고 1~n까지의 합을 계산하면 된다. 1~n까지의 합 공식 : n x (n+1) / 2 다른 분 코드 중에 ans 변수를 생성하지 않고 Math.max를 이용해서 구했다. 직관적으로 이해할 수 있어서 좋은것 같다. 소스코드 class Solution { public long solution(int price, int money, int count) { long totalPrice = (count+1L) * count * price / 2; long ans = totalPrice - money; if(ans >= 0) { return ans; } else { return 0;..
[프로그래머스] 위클리 챌린지 2주차 - 상호 평가 문제 문제는 여기서 확인 풀이 대학교 때 흔히 접한 조별과제 조별 인원 평가 점수를 가지고, 교수님의 입장에서 점수 계산을 한다. 조건 1. 내가 평가한 나의 점수가 최고점 또는 최저점이면 나의 점수는 제외하고 평균 점수를 계산한다. 조건 2. 하지만 나의 점수가 유일하지 않다면(동일한 점수가 또 있다면) 평균 점수 계산에서 제외하지 않는다. 중요한 요구조건은 이 두 가지다. 평균점수를 계산해야 하기 때문에 scores 2차원 배열을 모두 1번씩은 순회해야 하는 것은 필수다. 딱 1번씩만 순회하도록 하는 게 가장 빠른 시간일 것이다. 최고/최소 점수 여부, 유일성 여부는 평가받은 점수를 가지고 검사해야 한다. 한 사이클에 1인의 평균 점수(제외 여부 포함)를 구하고 치우는 것이 temp memory를 적..