알고리즘/프로그래머스 Level1 49

[PCCP 기출문제] 붕대 감기

문제 분석 붕대감기 문제 요약 1. 플레이어는 hp가 최대치가 아니면 붕대감기 스킬을 시전한다. 2. 붕대는 1초마다 x만큼 회복하며, 특정한 t초 연속으로 붕대를 감았다면 y만큼 보너스로 회복한다. 3. 공격을 받으면 붕대감기는 취소댄다. 4. 최종적으로 현재 체력을 반환한다. hp가 0이 내려가면 -1를 반환한다 문제 풀이 전형적인 구현 문제이다. 정리해놓은 순서대로 하나씩 구현을 해나가면 된다. 여기서 1초마다 hp를 체크해 나갈것인지, 공격을 받는 구간만 계산하는지 두가지 전략이 있다. 하지만, 1초마다 체크해 나가는 전략은 효율성이 매우 떨어지니, 조금 복잡하더라도 공격을 받는 구간에 hp잔여량을 계산하기로 하자. 우선 hp가 최대치일 경우만 붕대감기를 적용시킨다. 그리고, 공격을 받는 시간과,..

[프로그래머스, 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] 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] Level1: 개인정보 수집 유효기간

문제분석: 카카오 2023년 블라인드 채용때 나온 문제다. 카카오 문제는 기본적으로 어렵기때문에 이 문제도 1.5단계라고 생각하면된다. 요점: 만료된 계약 찾기 우선, 약관마다 기간이 다르기때문에, 약관을 다른 공간에 저장해두고 사용해야한다. 매번, 개인정보를 확인할때마다 약관리스트를 찾는건 효율성이 매우 떨어지기때문이다. 약관을 저장할 map을 생성하고, map 에다 약관의 종류와 기간을 입력한다. 이제부터 개인정보에 적용할 약관을 찾는데 O(1)이 걸릴것이다. 이젠 개인정보마다 만료됨의 여부를 체크할것이다. 여부는 isExpire() 메소드를 통해 진행할것이다. privacy를 "." 으로 분해를 한뒤, 정보를 각각 빼옵니다. 약관에따라 월 단위를 증가 시킵니다. 이 과정에서 월이 12월을 넘어갈수 ..

[프로그래머스,Java] Level1: 햄버거 만들기

문제분석 정해진 레시피가있습니다. 빵 - 야채 -고기 - 빵 상수는 재료가 떨어지는걸 보고, 빵 - 야채 -고기 -빵 패턴이 보이면 바로 제작합니다. -> 이걸 구현만 해내시면됩니다. 하지만 최적화를 시켜야하는게 문제죠 First Try: replaceFirst 문법 사용하여 풀기 우선 ingredient의 원소를 모두 문자열로 받아씁니다. EX) 211231231 그리고 빵 - 야채 - 고기 - 빵 인 "1231" 패턴을 찾아서 빈칸으로 만들고(지우기) 햄버거 1개를 추가합니다. replaceFirst는 맨 처음 '1231'패턴을 찾기만 하는 문법입니다. 이걸 햄버거가 더이상 안만들어질때까지 반복시킵니다. ---> But, 효율성 오류 추측되는 이유, replaceFirst 내부에서 O(n)만큼 계속 ..

[프로그래머스, Java] Level0: 겹치는 선분의 길이

Level0 이지만, 학습할 점이 많은 문제라서 가져왔습니다. 문제분석: 목표: [start,end] 로 구분이된 선분들의 겹치는 선분의 길이 구하기 First Try: 모든 선분 [Start ~ End] 까지 +1을 한뒤, 2가 넘으면 answer++ 증가 -> 보자마자 이 전략이 떠올랏습니다. 하지만, 윗 그림과 같은 케이스에서 문제가 일어납니다. [[0, 2], [-3, -1], [-2, 1]] 와 같이 중간이 파여버린 부분은 해당로직이 인식을 못하여 4를반환합니다. 2를 반환해야 하는데 말이죠, 그렇다고 정확히 파악할수있는 0.5점을 파악하기도 힘듭니다. Second Try: Start가 낮은 선분부터 선분을그려 +1을한뒤, 실시간으로 2가 넘으면 answer++ 증가 (단, 이미 체크한 점 (방..

프로그래머스 [JAVA] Level1: 숫자 짝꿍

문제분석: 이 문제는 제한사항만 아니면 쉽게 풀수있다. 예를들자면, for( X배열) , for(Y배열) 2중반복문으로 짝꿍 숫자를 찾는것이 가능하다. 하지만 길이가 300만이기때문에 300만*300만 연산은 말이안되기때문에.. 효율적인 코드를 짜야한다. 1. 목표! 데이터 배열은 1번만 돌리자 즉, 최소 O(n) + O(n2) , 300만+300만 = 600만 연산만 사용하자를 목표로두었다. Map을 사용하였다. 첫번째 Map은 X의 배열을 입력받아 Y배열과의 짝궁여부를 확인하는 용도. 두번째 Map인 couple맵은 짝궁여부가 가능하다면, Couple 정보를 입력받는다. 남은건 Couple 맵에 저장된 정보를 바탕으로 문자열을 작성한다. 예외처리로 커플이없으면 -1 , 0으로 시작하는 문자는 0으로 ..

[프로그래머스, Java] Level1: 성격 유형 검사하기

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제분석 : 카카오의 Levle1 = 쉬운데 엄청난 노가다를 시킨.. 문제 설명 길이부터 엄청 남다르다.. 문제를 요약하자면 MBTI 마냥 4개의 지표가있다. 1번지표 RT 2번지표 CF 3번지표 JM 4번지표 AN 여기서 R T 중 점수가 더 높은쪽이 R 지향인지 T 지향인지 출력하면된다. 2~4번도 마찬가지 근데 지표는 RT가 TR 처럼 뒤집히는 경우도있다. 점수를 얻는방법은 Scores[]..

[프로그래머스,자바] Level1: 신고 결과 받기

문제분석 문제목표: 신고 건수를 처리하여, 신고한사람에게 몇건의 처리 결과 메일을 보내야하는지 구하시오. 제일 첫번째로 해야할 일은, K번 신고당한 사람이 누구인지를 알아야합니다. 그래야지, 신고한 사람에게 처리결과 메일을 보낼수 있게되니깐요. K번 신고당한 사람이 누구인지 만 찾으면 안됩니다. 그 이유는, 저희 목표가 신고당한 사람을 신고한 사람을 찾아 메일을 보내는게 목표입니다. 따라서, 신고당한 사람마다 하나의 신고한사람의 리스트를 가져야할 필요가있습니다. ->사람: 신고한 리스트 = 1: 1 즉, Map을 사용할 필요가있습니다. Key : User Value: 유저를 신고한 사람들 두번째로 해야할 일은, 신고를 처리해야합니다. 신고리스트 report[]를 돌리면서, 신고자와, 신고당한자를 문자열정..