알고리즘공부 24

세무민의 알고가자 : 프로그래머스 이상한 문자 만들기 문제 풀기

오늘 풀어 볼 문제는 이상한 문자 만들기! 문제 설명 & 제한 사항 & 입출력 예시 문제 풀이 사실 이번 문제는 조금 이해가 안됬다. 문제가 어려워서 이해가 안된것이 아니라 쉬운데 왜 아스키코드로 접근하면 틀렸다고 하는지... 무튼 내가 접근했던 방법은 총 3가지! 1. 아스키 코드로 변환해서 대소문자를 변경해주기 2. str -> list -> str로 쪼개서 만들기 3. list 상태로 구분하기 3가지 중 정답은 3번이였다. 위에 문제를 접근하기 전 가장 먼저 체크해야 하는 부분은 홀수와 짝수를 구분해서 대소문자로 변경해주는 것인데 이는 X % 2 == 0이라는 조건이 만족한다면 대문자, 그렇지 않다면 소문자! 배열이 0부터 시작하기 때문에 잘 체크해야 한다. 무튼 아스키코드로 접근하려고 했던 방식은..

세무민의 알고가자 : 프로그래머스 카펫 문제 풀기

오늘 풀어볼 문제는 카펫! 생각해보면 쉬웠으나 삽질을 조금 해버림...ㅎ 문제 설명 제한사항 및 입출력 예시 풀이 이 문제는 우선 문제를 이해하는 것이 중요하다. 결국에는 노란색 카펫이 갈색 카펫보다 작아야 한다는 것을 인지해야 한다. 예를 들어서 Brown, Yellow = 24, 24의 예시를 들어보면 아래의 그림처럼 그릴 수 있다. 여기서 중요한 건 노란색의 테이블을 갈색 테이블이 포함해야 한다는점! 여기서 확인할 수 있는것은 아래와 같다! 결국 Yellow는 (x-2)(Y-2)의 값을 일치하는 경우의 수를 찾아야 한다. 반복문을 이용하더라도 위와 같은 경우의 수를 인지하지 못한다면 1~2개 정도의 테스트 케이스를 통과하지 못한다. 그 이유는! Yellow를 포함하지 않는 값을 출력하기 때문! 이번..

세무민의 알고가자 : 프로그래머스 구명보트 문제 풀기

오늘 풀어볼 문제는 구명보트! 문제 설명 제한 사항 및 입출력 풀이 이번 문제는 탐욕법을 이용하는 문제에요 말 그대로 최소보트의 개수를 구해주면 됩니다. 예를 들어서 [70, 80, 50]을 보도록 하죠! limit가 100이라는 건 보트 한개에 최대 용량입니다. 보트에는 최대 2명만 탑승 가능한 경우의 수를 다 만들어보면 70, 80, 90, 70+80, 70+50, 80+50에서 100이하는 70, 80, 90 총 3개입니다. 따라서 최소 보트의 개수는 3개가 필요하게 됩니다. 즉 요약하자면! 1. 보트에는 최대 2명 탑승 가능하다는 조건 2. limit 이하로 탑승 가능하다는 점 3. 정렬을 하면 크기 비교가 더 쉽다. 탐욕법을 이용하게 되면 가장 빠른 접근 방법은 반복문이 되겠죠? 코드 def s..

세무민의 알고가자 : 프로그래머스 소수 찾기 문제 풀기

오늘 풀 문제는 소수 찾기! 문제는 쉽다고 생각했는데 생각보다 접근하고 코드 짜는데 오래 걸렸던 문제! 문제 설명 & 제한 사항 입출력 예시 풀이 일단 이번 문제는 코드 구현은 조금 어려웠으나 문제 푸는 방식은 쉽게 생각이 들었다. 예를 들어서 "011" 으로 문제를 풀어본다면 011라는 문자열을 쪼개서 가능한 숫자를 만든 후 소수인지 판별하면 된다. numbers numbers로 만들 수 있는 수 list 011 0, 1, 1, 01, 11, 10, 01, 011, 101, 110 set 011 0, 1, 01, 11, 10, 011, 101, 110 위의 표처럼 011로 조합할 수 있는 수를 모두 만들어 준 후 SET로 중복값을 제거하면 조합하는 숫자를 모두 확인 가능하다. 즉! 이번 문제를 푸는 방..

세무민의 알고가자 : [프로그래머스] 전화번호 목록 문제 풀기

이번에 풀어볼 문제는 전화번호 목록 문제! 생각보다 쉬웠지만 삽질을 조금 많이함 ㅎ 문제 설명 제한 사항 및 입출력 예시 풀이 사실 이번 문제는 쉽게 접근할 수 있는 문제 중 하나이다. 위의 예시처럼 i번째 문자열이 i+1번째 문자열에 포함이 된다면 False를 반환하면 되구 포함되는 접두사가 하나도 없다면? True를 반환하면 된다. 곰곰히 생각하다가 문제를 풀 방법은 딱 2가지가 생각났다. 첫번째 : 2중 For문을 돌리면서 하나씩 확인해보기 2중 포문으로 사용하는건 정확한 방법이지만 N^2 시간복잡도가 소요되기 때문에 효율성에서 많이 떨어진다. 두번째 : 정렬을 한번 해준 후 하나씩 증가하면서 확인하기 정렬을 이용하는 방법을 생각한 걸 예시로 보여드리면 위에 처럼 문자열 정렬을 하게 되면 포함된 값..

세무민의 알고가자 : [HackerRank] 2D Array - DS 문제 풀기

기존에 세무민의 코딩일기에 알고리즘을 작성했는데 오늘 블로그 스킨부터 조금 변경하다보니 따로 분리시켰고 그래서 명칭을 조금 변경해봤다. 세무민의 코딩일기(알고리즘) -> 세무민의 알고가자 이유는 추후에 쉽게 관리하고 싶은 마음에 ㅎㅎ 알고가자 -> 알고리즘 가자!라는 간단한 의미로 시작했다 ㅎ 무튼 오늘 풀어볼 문제는 2D Array! 문제 문제 예시 입력 조건 및 출력 조건 Sample 입출력 문제 요약 및 설명 우선 영어 문제라는 점에서 해석이 중요하다. hourglass : 모래시계 위의 단어가 포인트인데 결론적으로 2D 배열을 모래시개값을 합했을 때 가장 큰 결과를 가진 모래시계 값을 출력하면 됩니다. 그림으로 표현해봤는데 모래시계 모양으로 i칸씩 증가하면 옆으로 옮기면서 계산할 수 있도록 구현해..

세무민의 코딩일기 : 프로그래머스 다리를 지나는 트럭 문제 풀기

이번 문제는 다리를 지나는 트럭 문제! 이 문제는 기존에 Stack이나 Queue를 이용해서 문제를 푸는 걸 추천하지만 나는 list로 구현했당.... 사실 deque으로 구현했던 건 있으나 코드 실행은 문제 없지만 채점에서 실패한 것들이 존재해서..ㅎ 그냥 무난한 리스트로 ㅎ 문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7..

세무민의 코딩일기 : 프로그래머스 완주하지 못한 선수 문제 풀기

이번에 풀어볼 문제는 완주하지 못한 선수! 이 문제는 생각해보면 쉽지만 효율성에서 통과하기 어려웠던 문제 중 하나 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한 사항 및 입출력 예시 [ 제한사항 ] 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이..

세무민의 코딩일기 : 프로그래머스 신규 아이디 추천 문제 풀기

이 문제를 포스팅 하는 이유는....... 진짜 간단한 문제를 1시간 30분동안 풀었다는 점에서... 사실 풀고 난 후 테스트 케이스에 통과 못한 것들이 존재해서....하 ㅠㅠ 이번에 풀 문제는 신규 아이디 추천! 20201년 카카오 신규 블라인드 모집 문제 중 하나입니다. 문제 설명 카카오에 입사한 신입 개발자 네오는 카카오계정개발팀에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. 네오에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다...

세무민의 코딩일기 : 프로그래머스 기능개발 문제 풀기! [deque() 사용하기]

흠... 최근에 알고리즘을 공부하면서 이력서도 조금씩 쓰고 있는 중입니다. 그러다가 좋은 기회가 생겨서 코딩 테스트를 볼 예정인데...... 프로그래머스에서 시험을 본다고 하네요 ㅠㅠ 근데 사실 프로그래머스를 해본적이 없어서...... 급하게 오늘부터 시작했습니다.... (시험은 내일인데 슈벌...ㅠㅠ) 일단 프로그래머스 문제가 개인적으로는 어려운거 같네요 ㅠㅠ 뭔가 파이썬 코드로는 완벽하게 돌아가는거 같아도.... 숨겨진 테스트 코드에 통과하지 못하는 경우도 종종 발생합니다 ㅠㅠ 오늘 푼 문제는 이문제! 이 문제를 보면 딱 바로 생각나는건?? queue! 문제를 요약해보면! progresses : 현재 완료한 수치 speed : 하루 당 가능한 진도 수 즉! progresses와 speed를 이용해서 ..