알고리즘/문제풀이
[프로그래머스] 괄호 회전하기
이전에 괄호변환과 너무 비슷한 유형이었다. 그래서 그때 사용했던 풀이법을 그대로 사용했는데, 테스트 케이스에서 틀려버렸다. 이전에 괄호 변환시 사용했던 풀이법이 정석은 아니었다. 스택을 사용하는게 정석이었다. 스택을 사용한 풀이법이 약한 경우가 있어서, 스택을 활용한 문제를 다시 풀어봐야할 필요성을 느꼈다. 그리고, 항상 느끼지만 대부분의 문제가 카카오 문제를 활용한 것이 매우 느껴진다. 카카오 문제를 공들여서 풀어놔야겠다. 복습해야 할 유형과 문제들을 정리해놔야지 ... 1. 문제 설명 [](){} 이러한 형태의 문자열이 주어진다. 그리고 문자열을 왼쪽으로 x만큼 회전시킨다. 0번만큼 회전시키면 그대로, 1번만큼 회전시키면 ](){}[ 이 된다. 이런식으로 문자열의 길이-1 까지 계속 회전시킨다. 각각..
[프로그래머스] 다리를 지나는 트럭
문제가 정말 난해했다. 무슨소리를 하는지도 모르겠고, 전체적으로 조건도 명확하지 않았다;;; 어떻게 풀라는 것인지 ;;;;; 1. 문제 설명 최초에 다리의 길이와, 다리가 견딜 수 있는 하중의 무게, 그리고 지나가려는 트럭의 무게가 인자로 주어진다. 나는 일단 여기서 경과 시간이 1~2, 6~7인것이 이해가 안갔다. 지나갈때 몇초가 걸리는지에 대해 주어지지도 않았고, 스택을 활용한 좋은 문제인것은 맞지만 문제 출제진이 검토를 부실하게 한 것 같다. --; 이 문제를 그림으로 보면 조금 더 잘 와닿아서 그림으로 보겠다. 다리를 지나고 있는 자동차는 7kg 이기 때문에 그냥 지나가고 있다. 이때 1초가 추가된다. 순서대로 다음 자동차가 들어오려 한다. 여기서 헷갈림이시작된다. 자동차가 지나가는 행위 자체를 ..
[프로그래머스] 행렬 테두리 회전하기
문제가 그렇게 어려웠던 문제는 아니었다. 근데, 정말 오래걸렸다. 단순 구현문제라고 해서 답지를 보면 안된다길래 안보고 풀었지만.. 시간도 오래걸리고 ㅠㅠ 또르르... 일단 dx, dy를 코딩테스트로 풀때 우리가 생각하는 2차원 평면상의 x, y좌표랑 너무 헷갈렸다. 실제 문제풀때 이런게 헷갈리면 안돼서 이부분을 좀 제대로 머리에 인식해둬야겠다는 생각이 들었다. 그리고, 인덱스가 헷갈리는 문제는 꼭 종이에 풀이하면서, 변수명을 정확히 적으면서 해야한다. 1. 문제 설명 row와 columns가 주어지고, 주어진 만큼 1부터 시작해서 행렬을 채워 넣는다. 이후 문제에서 2,2 와 5,4 사이의 원소를 회전시키라고 한다. 회전시키면 이러한 형태가 된다. 이렇게 회전시킬 좌표를 n개가 문제에서 주어진다. 그리..
[프로그래머스] 예상 대진표
일단 재귀함수의 개념도 다시 짚고 가야했다. 1. 문제 설명 문제 상황은 토너먼트 상황이다. n은 참가하는 참가자 수이고, a와 b의 값은 각각 a와 b가 참가하는 순서이다. 여기서 문제는 a와 b가 무조건 각 토너먼트에서 승리하고 올라간다면, 언제 2명이 경쟁하는 순간이 오느냐이다. 그림으로 보면 다음과 같다. 노란색 네모가 최초의 4번째 참가자인 a이고, 연두색 네모가 최초의 7번째 참가자인 b이다. a와 b가 대결을 하게 되는 순간은 3번째 경기 과정이고 문제에서는 이 3번째를 구하는 함수를 요구한다. 2. 어려웠던 점 1) 재귀함수 return 처음에 코드를 이렇게 작성했는데, None을 리턴하게 되었다. def dfs(n, a, b, cnt): if abs(a - b) == 1: return c..
[프로그래머스]수식 최대화
내가 했던 삽질 이 문제는 정말 삽질을 많이 했던.. 그리고... 정말 오래걸렸던 문제이다. 일단 처음에 BFS를 사용하려고 했고, 정규표현식을 사용하려고 했었다. .. 그러다가 점점 산으로 갔다. 아무튼 !!! 문제 해석 + 요구사항을 확인해보자. 1. 문제 해석 주어진 사칙연산의 개수는 *,-,+ 3가지 이다. 3가지를 활용해서 만들 수 있는 모든 연산순위를 주어진 문자열에 이용하여 연산했을 때 나올 수 있는 최대값을 구하기 2. 요구사항 1) *,-,+ 3가지 연산자를 활용하자 -> 여기서 3!임으로 6가지 밖에 없어 특별히 combination을 사용할 필요가 없다. 2) 주어진 문자열 패턴에서 연산자 순위를 적용해 우선풀이 3. 내가 실수한 것 1) 내가 만들려고 했던 함수는 다음과 같다. 3가..
[프로그래머스] 메뉴 리뉴얼
갑자기 글이 날라갔다.. 후... 나름 또 시간 들여서 쓴 글인데 ... 아무튼 이 문제는 문제를 꼼꼼히 읽어야 했던 그런 문제.. 1. 문제 설명 문제 각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders, "스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, "스카피"가 새로 추가하게 될 코스요리의 메뉴 구성을 문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요. 입출력 예시 입출력 예에 대한 설명 입출력 예 #2 AD가 세 번, CD가 세 번, ACD가 두 번, ADE가 두 번, XYZ 가 두 번 주문됐습니다. 요리 5개를 주문한 손님이 1명 있지만, 최소 2명 이상의 손님에게서 주문된..
[프로그래머스]소수 찾기
에라토스테네스체 개념을 되짚어 보고, 문제 조건을 세심히 읽어야할 필요성을 일깨워준 문제이다. 그리고, 지스트 https://gist.github.com/ 라는 사이트를 알게 되었다. 코딩 테스트 볼때에 유용하게 관리할 수 있기 때문에 한번 해보려고 한다...!(언제할지는 모르겠지만 ^^)... 아무튼 나는 이 문제를 풀때 3가지 짚고 넘어가야할 부분이 있었다. 1. 에라토스테네스의 체 def eratosthenes(): prime[0] = prime[1] = False for i in range(2, 10000001): if prime[i] == True: for j in range(2 * i, 10000001, i): prime[j] = False 개념을 다시 생각해보면, 0과 1은 소수가 아닌 수로..
[프로그래머스]전화번호 목록
그렇게 어렵지 않았던 문제이고, 나는 배열을 활용해서 풀었다. 그런데, 시간초과랑 테스트 케이스에서 2~3개 정도 틀렸다. 풀이 이전에, 알고넘어가야 할 메소드만 정리한다. 문자열 클래스에서 제공되는 메소드! isdigit() -> 해당 문자열이 숫자인가? stasrtswith(a) -> a로 시작하는 문자열인가? swapcase() -> 문자열의 대소문자를 바꿔준다. 훨씬 더 많은데, 일단 이것만 기억하기로... 1. 리스트로 풀이 일단 이 문제를 해시를 사용해서 풀기에는 애매했다. 분명 내가 해시를 잘 활용할 줄 몰라서 그렇다. 일단 내가 처음 풀었던 풀이는 다음과 같다. def solution(phone_book): for idx, val in enumerate(phone_book): temp = ..