반응형

알고리즘 183

[프로그래머스,Java] Level4: 무지의 먹방 라이브

문제 분석 1. 회전테이블에 음식의 양이 다르게 담겨있는 접시들이 존재한다. 2. 테이블은 1초마다 회전한다. 3.무지는 1초마다 회전되는 접시를골라 음식을 1개 먹는다. (빈 접시가 생기면 테이블에서 없앤다.) 4. 이때, 네트워크가 K초의 발생했다고 쳤을때, 무지가 다시먹어야할 접시를 골라주세요. 4번은 말장난이다. 네트워크 K초가 발생할때 무지가 다시먹어야할 접시 라고 이해하기보단, 무지가 K+1초에 먹어야할 접시를 구한다 라고 보는것이 편하다. 문제는 아주 심플하다, K만큼 음식을 소모하다 K+1번째를 고르면 되지만, K의 데이터가 억단위를 넘는다. 즉, 1부터 K까지 일일이 음식을 소모하는 짓은 미친짓이다. 당연히, 이런 빅데이터를 예상하고 주어지면 효율적인 코드를 생각해야한다. 어떻게 효율적으..

[프로그래머스,Java] Level2: 과제 진행하기

https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Level2: 택배상자와 비슷한 문제다. Stack을 사용하여, 보조 컨테이너를 하나더 생산해서 일을 처리하는 부분에서 그렇다. 근데, 이 과제 진행하기가 조금 더 난이도가 있다. 이것저것 할게 많아서 그런거같다. 사전준비: String -> Int 문자열 정리 메소드 , 시간순서대로 정렬 여기서부터 로직 1. 과제진행 2. 과제를 진행하는데 다음 과제할 시간이 되있는지 체크 2-1 . 2번에서..

[프로그래머스,Java] Level2: 리코쳇 로봇

문제분석 : 문제 푸는 전략은 쉽게 생각할수 있지만, 구현하다보면 빡코딩이 된다. 그래서 만약, 이 문제를 못풀면 심한 자괴감이 들수있다. 그야.. 푸는 방법은아는데 구현을 못하면 그만큼 억울한 상황이 없으니.. 1. BFS 전략 사용하기 2. BFS 전략을 사용하여 최소거리를 구하는건 맞되, 리코쳇 로봇은 벽 , 장애물을 부딪힐때까지 움직인다. 즉, 원래 BFS는 4방향으로 1칸씩 움직여 도착하는 장소를 결정하지만, 이 문제는 4방향으로 몇칸씩 움직일지 매순간 미지수이므로, 움직여 도착하는 장소를 세밀하게 개선해야한다. 요약하자면 BFS전략에 이동하는 로직만 변경하면되는데, 막상 코딩을해보면 많이 버겁다. 문제풀이: BFS의 기초 방문체크와 Que를 선언했다. 방문체크는 재 방문을통해 무한루프를 방지함..

[프로그래머스,Java] Level3: 연속 펄스 부분 수열의 합

문제분석 수열이 주어지고, 이 수열에다 -1 , 1 이 반복한 수열을 곱하거나 1, -1을 반복한 수열을 곱한다. 그렇게 나온 수열중에 부분수열이 젤 높은값을 반환하는 문제다. DP , 부분합의 개념이없으면 풀기 힘든문제다. 윗개념을 사용하지않고 푼다면, 모든 부분수열을 구해야하는데, 비효율적이다. 첫 시작을 -1로 곱한것과 , 그대로 시작하는 결과는 매우 달라져서 둘의 경우를 분리하여 보셔야합니다. dp를 2개를 생성해야 한다는 말이죠. dp 작성 dp 기준을 잡는게 제일 중요한데, dp[n] = n까지 탐색한 모든 부분수열중 최댓값으로 잡습니다. 예시 {2,3,-6,1} dp[0] 를 음수로 시작을 해보자면, dp[0] = -2 입니다. dp[1]은 여기서 2가지 선택지가 있습니다. 0번째 숫자를 그..

[프로그래머스 ,Java] Level3: 스티커 모으기

문제분석 문제 이해는 매우쉽다. 요점은 한 지점을 골랏으면 양옆 지점을 못고른다. 이 규칙을 유지하면서 최대로 얻을수있는 스코어를 반환하면된다. 놀라운건 이 스티커문제와 도둑질문제 로직이 100%같다. (중복문제..) 이해는 쉽게했는데 막상 짜려고하면 참 막막할것이다. DP를 짜는건 늘 새롭고 어렵다.. 하나씩 생각해보자.. 1.첫번째를 고르면 마지막과 두번째를 못고른다. 2.두번째를 고르면 첫번째 와 세번째를 못고른다. 이 2가지 경우가 명백하게 다른 결과를 나타내는걸 푸는 사람 모두가 동의할것이다. 1번루트를 한번 타보자. 예시 {14,6,5,11} 첫번째를 고르면 첫번째는 14이다. 두번째를 고르는건 불가능하다. -> 현재 까지 최고값인 14로 저장해두자. 세번째를 고를수도 있고 안고를수도있다. -..

[프로그래머스 ,Java] Level3: 셔틀버스

문제분석 timetable로 주어진 시간을 전부다 숫자로 변환한다. 그 후, 한번 대기열순대로 정렬한다. 버스는 n 개 손님은 m명 배차간격은 t분이다. 9시부터 시작하여 버스 도착시간까지 대기열이 있다면 입장을시켜 출발시킨다. 여기서 문제는 어떻게든 늦게출근하고싶은 주인공을 반환해줘야한다. 어떻게든 늦게출근하고싶으니, 막차시간을 유의하며 보면된다. 막차+ 자리가 남을땐, 막차시간에 탑승을하면된다. 막차 + 자리가 없을땐, 대기열을 유리하게 가져가야하므로, 버스에 마지막에타는사람보다 1분일찍오면된다. 문제풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40..

[프로그래머스, java] Level1: 카드뭉치

문제분석: 전형적인 레벨 1 문제다. 문제는 원하는 문자열을 만들기위해 주어지는 2개의 단어 컨테이너 벨트가 존재하는데, 이 컨테이너벨트에서 뽑아서 문자열을 만들수있으면 ,Yes 아니면 No를 반환하자. 이 로직은 idx순회만 잘 조절하면 쉽다. 1번째 카드를 사용하면 1번째카드 ids를, 2번째카드를 사용하면 2번카드 idx를 둘다 못움직이면 NO를반환하자. 문제풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public String solution(String[] cards1, String[] cards2, String[] goal) { String answer = ""; int idx1=0; int idx2=0; for(..

[프로그래머스,Java] Level2: 호텔 대실

문제분석: 전형적인 스케쥴링 문제이다. 제일 쉽게 푸는방법은 0시부터 24시까지 1분마다 체크하여 입실,퇴실조치를 하면 편하다. 근데, 이 방법은 효율성이 매우 나쁜건 누구나 아는사실이고 실제로 이방법보다 효율성 좋게 스케쥴링하는방법이 널렸다. 근데 이 문제는 앞선 방법으로해도 풀린다... 그래도 귀찮터라도 효율적인방법으로 접근했다. 전략: 실제로 인간이 스케쥴링했을때 시뮬레이션대로 코드작성 말 그대로, 인간이 스케쥴했을때를 가정하여 짠다. 1. 우선 입실시간순 대로 정렬한뒤, 입실처리를한다. 2. 만약 퇴실시간이 되면 퇴실한다 But, 우리는 1분마다 체크를하는 방법은 포기했으니 다른 방법으로 퇴실시간을 체크한다. Arrange 2 : 이후에 입장할 사람의 입장할 시간보다 적은 퇴실시간은 퇴실조치한다...

[프로그래머스,Java] Level1: 둘만의 암호

문제분석 문제 설명대로 풀어주면된다. 딱히 효율성도 중요하지않아서 정말 하고싶은대로 풀기만하면 된다. 각 문자를 index마다 밀고, 만약 z를 넘으면 다시 돌아오고 , skip해야할 문자는 넘어주는 로직을 작성하자. 일단, 스킵과 문자열을 char형태로 모두 쪼개고, skip은 맵에저장한다. skip문자열의 확인을 map.containsKey로 확인할것이다. 스킵과 'z'를 넘어서는 조건을 입력했다. z를넘어가면 알파벳 갯수 (26개)만큼 빼주고, 스킵이되는 알파벳이면 for문의 i를 하나빼준다. i를 하나 빼주면 다시 계산하는 형태가된다. 전체풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32..

[프로그래머스, Java] Level3 : 파괴되지않는 건물

문제분석 문제설명이 상당히 긴 문제 근데 비교적 간단하다. 요점은, 스킬들이 Type으로 공격과 치유를 구분하고, 범위와 강도가 주어진다. 공격과 치유를 적용한뒤, 파괴되지않는 건물을 리턴하면된다. 이게끝? 맞다 이게끝이다. First Try: 2차반복문 사용 누구나 생각할 풀이방법이다. 스킬을 순회하며, 각 스킬마다 적용되는 범위에다 강도를 빼주거나 더한다. 그후, 마지막에 파괴된건물이 있는지 한번확인한다. 이렇게 하면 정확성은 100%다. 실제 카카오 테스트때도 50%응시자가 이와같은 코드를 짯다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 class Sol..

반응형