아무생각 없이 습관적으로 BFS 토마토 처럼 풀려고 했던 문제.입력 값에 1과 0만 있으면 토마토랑 단지 번호 구하기가 생각나나보다ㅡㅡ습관적으로 문제 푸는 것을 경계하자.이 문제의 입력데이터는 map이 아니라 연결정보를 나타낸 것이라는 것을 기억하자.visited 리스
프로그래머스스택을 이용. 스택의 top원소와 s의 원소가 같으면 pop. 다르면 append하여 최종적으로 stack이 비어있으면 1을 리턴. 아니면 0을 리턴한다.
📝 프로그래머스✍🏻 처음에는 반복문이나 함수를 만들어서 문제를 해결하려고 했지만 heapq를 이용해야 효율성테스트를 통과할 수 있다고 한다.기본적으로 heapq를 임포트 하면 최소힙이다.
영역의 테두리 숫자만 한칸씩 시계방향으로 회전. 이 때 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 반환✍🏻 행렬을 만들고 4가지 부분으로 나누어 회전. 제일 왼쪽 위 숫자를 기준으로 잡는다. 부분을 회전할 때마다 최솟값을 구해 저장한다.회전시키기
enumerate : 반복문 사용 시 몇번 째 반복문인지 확인이 필요할 때 사용한다. 인덱스 번호와 컬렉션의 원소를 튜플 형태로 반환한다. (인덱스, 값)popleft를 먼저하기 때문에 만약 printer에 원소가 하나면 더 이상 남아있지 않기 때문에 if printe
📝프로그래머스✍🏻 접두어가 있으면 False를 반환하는 것이므로 다음과 같이 코드를 짰었는데 정확성은 100이었지만 효율성이 반타작이었다. 정렬을 먼저 하는게 훨씬 빠르다는 것을 알게되었다.정렬을 하면 우선 해당 수와 다음 수와만 비교하면 된다!파이썬의 starts
프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/1844BFS로 구현. 경로가 여러개이더라도 방문여부를 판별해 값을 바꿔주므로 자연스럽게 마지막 행,열에는 최소경로
프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/43164나의 실력 부족일테지만, 이 문제는 정말 어렵게 느껴졌다.우선 DFS로 풀거라고 예상했지만 DFS는 항상 재귀로 해결해왔기에 스택으로 푸는 방법을
프로그래머스이 문제는 BFS로 푸려고 접근했었는데 dfs 특히 스택으로 푸는게 더 간단한 것 같다. 사실 그게 그거일 수 있다..ㅎㅎ 다만 이해하기에 스택으로 푸는 게 나는 더 쉬웠다.우선 변환 과정을 카운트 할 step이라는 변수, 단어를 담을 스택 path, 중복해
프로그래머스문제 보고 엄청 쉽다고 생각해서 다음과 같이 풀었는데효율성이 0점이었다...그래서 찾아보니 다음과 같이 정렬을 한 다음에 zip으로 하면 같은 인덱스로 비교가 가능하다.무조건 participant의 원소가 completion의 원소보다 같거나 크므로, 같은
프로그래머스여집합을 생각하자!headgear가 2개, eyewear가 1개, face가 3개일 때입을 수 있는 의상 조합은(하루에 최소 한개는 입는다)각각 안입는 것도 포함해서 3\*2\*4 에서 모두 안 입는 1을 빼면 된다.이 방법이 기억이 안나서 찾아봤다..^^k
프로그래머스이 문제에서 주의해야할 점은 operations에 숫자같이 보이는 것도 문자라는 것이다. 따라서 힙에 넣을 때도 int형으로 바꿔주어야 하고 -1, 1인지 판별할 때도 문자로 판별해주어야한다.이 문제는 우선순위 큐(힙)의 기본 정석같은 문제인 것 같다.파이썬
프로그래머스이 문제는 최단거리를 구하는 문제가 아니고, 갈 수 있는 방법의 개수를 구하는 문제이기 때문에 BFS가 아니라 DP로 풀어야한다.road라는 2차원 리스트를 만들어 1로 초기화하고, 웅덩이는 0으로 만들어주었다. 리스트의 1행과 1열은 가는 방법이 하나 뿐이
프로그래머스집이 동그랗게 배치되어 있는데 인접한 집은 털면 안된다.전전 dp와 현재 돈을 합친 것과 바로 전 dp를 비교해 큰 것을 dp에 저장하면 되는 것으로 생각하긴 했지만 원형으로 배치되어있기 때문에 이를 어떻게 처리해야하나 고민이 많았다.찾아보니 1번집을 털 때
프로그래머스이렇게 푸니 테스트케이스에서 두개 빼고 시간초과가 떴다..그리고 심지어 int형으로 변환 안해도 됨..int형으로 안바꾸면 테스트케이스에서 네개 통과하고 나머지 시간초과뜬다ㅋ..결국 방법 자체가 이렇게 하는 게 아니란 소리인데 찾아보니 스택을 쓰는거였다.진짜
프로그래머스이 문제는 스택으로 풀려고 했었다. 그런데 pop이나 reverse를 쓰면 효율성에서 틀린다는 말이 있었다.아래와 같은 방법을 찾았는데 정렬한 다음 인덱스를 이용해서 가장 무거운, 가장 가벼운것의 합이 limit보다 작거나 같으면 둘 다 탑승하고 인덱스를 둘
프로그래머스이 문제를 통해 첫번째 원소를 pop할 때 deque을 선언하지 않고 pop(index)로 pop(0)을 하면 된다는 것을 다시금 깨달았다.즉, appendleft()하지 않는 이상 deque을 쓰지 않아도 되는것이다.다리 위에 올라갈 수 있는 트럭의 수는
프로그래머스처음에 다음과 같이 구현했는데 샘플 테스트 케이스 하나만 통과했다.해놓고 보니 정말정말 단순하게만 생각했다는 것을 알 수 있었다..ㅋㅋ..작업 시간이 적게 걸려도 그 시점에서 처리할 수 없는 작업일 수 있다는 것을 간과했다.따라서 이 문제는 현재 시점에서 처
프로그래머스어려ㅂ다 후하후하주어진 숫자 N으로 각 횟수 당 만들 수 있는 숫자 조합을 만든다.만들어진 숫자 조합에 number로 주어진 숫자가 있는지 확인한다.만약 있다면 그 지점에서의 횟수를 답으로 리턴없다면 횟수를 하나 늘리고 가능한 숫자 조합을 만들고 1~3 반복
프로그래머스처음에 이렇게 했더니 15개 중에 3개만 통과했다..
프로그래머스: 각각의 문자는 A, B, C...로 가는 방법 / A, Z, Y..로 뒤에서 가는 방법 둘 중 최소를 선택: 다음 문자를 왼쪽 문자를 바꾸기/ 오른쪽 문자를 바꾸기reference
프로그래머스크루스칼 알고리즘 사용=> 최소비용으로 연결하기.1\. 비용 기준 오름차순으로 정렬하고2\. 사이클이 형성되지 않으면 집합에 넣는다.costs를 비용 기준으로 오름차순으로 정렬한다.집합 자료구조를 이용하여 처음 원소를 넣는다.처음 비용 값에도 처음 원소를 넣
프로그래머스어떻게 풀어야할까 고민이 많았는데 찾아보니 간단했다.우선 나가는 지점을 중심으로 오름차순 정렬을 한다.\[\[-18, -13], \[-14, -5], \[-5, -3], \[-20, 15]]그 다음 문제에서 주어진 조건으로 차량의 진입 지점, 진출 지점은 -
프로그래머스심사 받는 데 최소가 되도록 어떻게 이진탐색을 적용하지 고민이 많았는데 모든 문제가 그렇듯 알면 어렵지 않다..이진탐색을 어떤 원리로 적용하냐면,전체 걸리는 시간의 최소시간, 최대시간을 설정한다.최소시간은 1로 설정했고, 최대시간은 모든 사람이 가장 오래 걸
프로그래머스방법1\. 이분탐색을 위해 정렬2\. 시작을 0 끝을 거리로 두고 절반을 가지고 비교. 0과 25로 두고 가운데 값 12로 시작을 한다고 가정. 답이 12라면 바위를 n개 제거했을 때 최소거리가 12인 것이 있어야 한다.3\. 만약 12보다 작으면 그 바위는
프로그래머스양방향 그래프를 만든다. 인덱스는 0부터 시작인데 1부터 값이 있기 때문에 n보다 하나 키운 사이즈로 둔다.BFS를 이용한다.queue에는 원소와 카운트를 함께 넣는다.visited에서 해당 원소의 값이 -1이면 cnt로 업데이트하고 cnt를 카운트 업 해준
프로그래머스이 문제를 처음에 봤을 때 행, 열 중 짧은 걸 기준으로 만약 4라면 4x4를 검사하고 정사각형이 안만들어지면 3x3을 검사하고 이렇게 진행해야하나 싶었다.그런데 dp로 푸는거였다니...... 정말 예상치도 못했다.(1,1)부터 검사를 시작해나간다. a, b
프로그래머스이 문제는 괄호짝 검사 + 리스트 회전이 합쳐진 평범한 문제인데 대박적인것을 알아내었다.나만 몰랐던 것 같긴 한데..ㅎㅎ우선 나는 이렇게 문자열 s를 리스트화 시켜서 첫번째 원소를 pop하고 리스트 뒤에 붙여주고 check함수를 통해 괄호짝이 잘 맞는지를 검
프로그래머스📌 다익스트라 알고리즘: 한 지점에서 다른 모든 지점까지의 최단경로를 계산단계마다 방문하지 않은 노드 중 가장 최단 거리가 짧은 노드를 선택한 후 그 노드를 거쳐가는 경우를 확인하여 최단거리를 갱신한다. -----> 우선순위 큐 사용 각각의 경우에 가장
1번 마을에 있는 음식점이 K 이하의 시간에 배달이 가능한 마을의 개수 구하기.자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다.각 원소의 합이 S가 되는 수의 집합
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.문자열 s의 길이 : 2,500 이하의 자연수문자
회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다.Demi는 N시간 동안 야근 피로도를 최소화하도록 일할 겁니다.Demi가 1시간 동안 작업량 1만큼을 처리할
프로그래머스\[0, 0,0, 0,0,0 ...] 처럼 각 원소의 수가 점차 증가하는 2차원 배열 만드는 방법\[\[0 for j in range(1, i+1)] for i in range(1, n+1)]방향은 아래 -> 오른쪽 -> 위 이렇게 세가지. i를 3으로 나눈
프로그래머스각각의 수를 2로 나눴을 때의 몫, 나머지, 합을 구해보면 다음과 같은데이렇게 합이 같은 것 끼리 만난다는 것을 알 수 있다.따라서 a와 b가 같아질 때까지 2로 나눈 몫과 나머지의 합을 구해보면 된다.
프로그래머스처음에는 number보다 큰 수부터 수를 증가시켜가며 그 수를 이진수로 바꾸고, number와 비교하여 다른 수가 몇개인지 세고, 그 카운트가 2 이하이면 반환하는 방식으로 풀었다.그랬더니 테스트케이스 3개는 틀렸고, 2개는 시간 초과가 떴다.시간 초과가 떴
프로그래머스유튜브의 우리밋님의 코드 설명을 들었다. 수 계산을 바로바로 하지 않고 문자로 다루어 마지막에 eval함수를 통해 계산하는 것이 인상적이었다. 물론 정규표현식 사용도..\`parser = re.sub('(SDT?는 있을 수도 없을 수도 있다는 뜻. SDT와
프로그래머스이 문제를 기록하는 이유는 공백 때문이다.처음에 공백 기준으로 리스트를 만들어서(s.split()) 리스트의 각 원소(단어)를 대상으로 인덱스의 홀짝을 알아내어 바꿔줬는데 이렇게 하면 단어 사이의 공백이 2개 이상일 때 문제가 생긴다. 그래서 정규표현식을 사
프로그래머스2진수로 표현하기, 자릿수 맞추기 함수를 쓸 수 있다면 매우 간단한 문제.2진수로 바꾸는 방법은 알았지만 자릿수 맞추기 함수는 이번에 알게되었다.텍스트.zfill(총 자릿수)를 하면 자릿수에 맞게 앞 부분이 0으로 채워진다.zip함수를 이용해서 리스트 두개를
프로그래머스isalnum() : 숫자, 영어, 한글일때 truenew_id 에 '...'이 있을 때 replace('..', '.')를 하면 '..'이 된다. 이것을 또 '.'으로 바꿔야하므로 while문을 통해 '..'이 있다면 모두 바꾸도록 하였다.
프로그래머스이 문제를 통해 파이썬의 정규표현식에 대해 조금 알게되었다.expression = re.split('(\[-+\*])', expression) \--> \['100', '-', '200', '\*', '300', '-', '500', '+', '20']eva
프로그래머스이 문제를 보고 딕셔너리를 이용해야겠다는 생각이 들었다. 그런데 record에 있는 문장들을 순서대로 앞에 이미 결과에 담아버린 이름을 어떻게 바꾸나 했는데 순서대로 처리해줄 필요가 없었다.우선 회원 아이디와 이름을 키-값으로 하는 mems 딕셔너리를 만들고
프로그래머스처음에 이렇게 풀었다.1부터 j까지의 합에서 1부터 i까의 합을 빼서 값이 n이 되면 카운트업하는 방식으로.하지만 이 방식은 정확도는 100인데 효율성은 0이다..if j\*(j+1)/2 - i\*(i+1)/2 > n: break 이 코드를 추가해주면 효율성
프로그래머스이 문제는 처음에 0으로 초기화된 11x11 배열을 만들어서 지나온 점을 1로 만드는 방식으로 풀었는데 문제가 되는 점이, 지나온 점을 또 못가는게 아니라 지나온 길 즉 선이 중복되면 안되는 거였다.방법은 집합을 사용하고 (출발, 도착), (도착, 출발)을
프로그래머스이 문제를 보고 처음에 왼손으로 누른 마지막 번호와 오른손으로 누른 마지막 번호를 각각 기억해야 하므로 스택을 사용하는 건가 싶었지만, 이전의 내역을 모두 알아야하는게 아니므로 단순히 각 경우의 변수를 만들어 변수에 값을 대입해 갱신해주면 되었다.그리고 키패
프로그래머스이 문제는 은근히 말이 헷갈렸다.그런데 문제에서 나온 설명 그대로 코드로 작성하면 된다.처음에 이런식으로 구현하니 11번 테스트케이스에서 통과를 못했다.\[0, 1, 1] 일 때 답이 1이 나와야하는데 1이상인 수가 2개이다보니 if조건을 충족시키지 못해 0
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습
자카드 유사도 구하기.두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다.집합 A와 집합 B가 모두 공집합일 경우에는 나눗셈이 정의되지 않으니 따로 J(A, B) = 1로 정의한다.자카드 유사도
튜플 구하기.원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.{{a1}, {a1, a2}, {
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다.예를 들어 1, 1, 1, 1, 1로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수
각 배포마다 몇 개의 기능이 배포되는지 구하기.각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배
정수를 이어 붙여 만들 수 있는 가장 큰 수 구하기주어진 정수가 6, 10, 2라면 6102, 6210, 1062, 1026, 2610, 2106를 만들 수 있고, 이중 가장 큰 수는 6210입니다.0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다.학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번
모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기 구하기.sizes의 길이는 1 이상 10,000 이하입니다.sizes의 원소는 w, h 형식입니다.w는 명함의 가로 길이, h는 명함의 세로 길이w와 h는 1 이상 1,000 이하인 자연수각각의 리스