오늘부터 코딩테스트 역량을 복구하기 위해서 매일 프로그래머스 한 문제씩 풀기로 했다.이 문제는 ( 열리는 경우는 아예 신경 쓰지 않아도 괜찮다. 마지막에 괄호를 담는 자료구조가 empty인지 체크만 하면 되기 때문이다.다만 )가 나올때가 케이스가 갈리는데1) 자료구조의
입출력예시를 치사하게 한자리 숫자로 들어서 착각하게 유도하는 문제. 당연히 N자리 숫자가 올 수 있다. 따라서 순회하면서 체크하면 당연히 틀리고, 공백을 기준으로 파싱한 문자열들을 stoi 함수로 interger로 변환한 후 크기 비교를 하는게 답이라고 생각했는데, 아
두 수를 곱한 값의 누적이 최소가 되도록 만드는게 목적이니까 두 배열을 정렬해서 a번째와 배열의 길이인 len - a - 1 번째 요소를 곱해서 값을 누적하면 된다.직관적으로는 큰 수 끼리 곱하면 값이 크게 부풀기 때문에, 큰 수는 작은 수와 묶어 눌러줘야 한다는거고논
문자열을 순회하면서 바로 앞이 공백이라면 해당 문자를 대문자로, 아니면 소문자로 바꾸면서 전진하면 된다.단, 무조건 제일 앞에 있는 문자는 대문자로 만든다.C++ API로 아래의 기능을 지원한다.https://en.cppreference.com/cpp/stri
문자열을 순회하면서 0이면 0개수에 ++ , 1이면 그걸 새로운 문자열에 넣기. 그렇게 해서 새로 나온 문자열의 길이를 이진수로 변환해주는 함수 하나만 작성하면 된다. 이 문제를 원활하게 풀려면 십진수 -> 이진수로 변환하는 과정에 대해서 잘 알아야 하는데, 학교 전공
보자마자 든 생각은 1부터 n까지 순회하면서 그 숫자부터 시작해서 하나씩 빼면서 0에 딱 맞는지 0보다 작은지 체크하면 되겠네! 였다.1트만에 정답을 맞췄지만 찝찝했다. 최악의 경우 O(n^2)일 수 있기 때문에다른 사람의 풀이에서 본 풀이 하나가 신기해서 기록하려고
처음에는 일단 브루트포스로 순회하면서 연속된 문자가 잇으면 두 문자를 제외하고 새로운 문자열을 만들어서 순회하는 코드를 짰는데, 당연히 효율성 쪽에서 시간 초과가 발생했다.고민을 좀 더 해보다가, baab 케이스를 보고 마치 괄호 쌍 찾는 문제 처럼 stack을 사용해
가장 무식한 방법은 n+1부터 1'000'000 까지 순회하면서 이진수로 변환했을 때 1의 개수가 같은지 체크해서 반환하는 방법이었고, 그거 제외하곤 마땅한 해법이 떠오르진 않았다. 근데 이게 정?답이었다. 생각해보니 1'000'000이면 이진수로 변환해봤자 2^19승
문제 해설 피보나치는 정말 많이 풀기도 하고 많은 강의에서 예시로 드는 대표적인 항목이라, 바로 풀었다. 가장 빠른 DP로 해결 코드
가로를 col, 세로를 row라고 하면 결국 row col = brown + yellow 인 점을 알 수 있고.brown = row 2 + col 2 - 4 라는걸 알 수 있다. (brown 블록이 가장자리만 차지하고 있기 때문에따라서 yellow = row c
생각보다 시간을 많이 쓴 문제였는데, 괜히 DP나 greedy 풀이법을 고민하느라였다.이 문제는 한 가지 사항을 주의해야하는데, 바로 크기가 동일한 귤의 '일부'를 담을 수 있다는 것이다.예를 들어 아래와 같이 귤이 있고, k가 10이라고 친다면이러면 7 6개 6 4개
제목에서 스포를 당했고, 이 문제는 그리디 기법으로 푸는 문제이다.나는 사람들을 몸무게 순서대로 오름차순 정렬 후 양 끝에 있는 사람들의 몸무게 합이 limit 이하면 둘을 한번에 보트에 실어 나르고, 초과라면 몸무게가 많은 사람만 구명보트에 담아 날랐다.이를 증명하기
문제에 답이 나와있다. 문제를 자세히 보면 칸이 4칸일때 5가지 조합중 3가지 조합이 n이 3일때의 방법으로부터 파생된 걸 알 수 있다.즉, 어떤 경우가 와도, i개 칸 건너기 = (1칸 & i-1칸을 뛰는 모든 경우의 수) + (2칸 & i - 2칸을 뛰는 모든 경우
K칸 점프는 1칸 점프 K번과 도착 위치도 건전지도 같으니, 1칸 점프(건전지 1)와 순간이동(공짜)만 생각하면 된다그런데 순간이동은 지금까지 온 거리를 2배로 만들기 때문에, 같은 1칸이라도 뒤에 순간이동이 0번 남으면 1, 1번 남으면 2, 2번 남으면 4만큼의 거