Leetcode를 시작하고 처음 풀어본 문제 Two sum.정수형 배열 nums가 주어지고 정수 target가 주어졌을 때, nums의 두 요소의 합으로 target을 만들 수 있는 인덱스를 배열로 넣어 구하는 문제다.그냥 보자마자 이중반복문으로 푸는 걸 생각했다. 이
최소공배수를 구하는 문제이다. 최대공배수는 최소공배수를 알면 된다. 최소공배수는 유클리드 호재법을 사용하는데, 두 수를 나눈 나머지를 이용해서 최소공약수를 구하는 방법이다. 최소공약수, 최소공배수 풀이법만 알면 쉽게 푸는 문제지만 거의 3개월만에 다시 푸는 코딩테스트
모든 단어의 첫 문자가 대문자이며 나머지는 전부 소문자인(단어의 첫 문작 숫자일 경우 다음 문자는 소문자이다) JadenCase를 적용해서 문자열을 리턴하는 문제이다.단어들의 첫 문자만 대문자가 되어야 하므로 문자열을 전부 소문자로 바꾼 뒤에 필요한 문자만 대문자로 바
행렬의 곱셈이다. 2차원 벡터에 삽입하기 위해 벡터를 따로 만들고 각 요소는 덧셈으로 구한다는 것까지 구현했으나... 세 번째 반복문의 조건이 문제였다. 결국, 인터넷의 답을 찾아서 풀었다. 만들어진 벡터의 행은 arr1의 행과 같으니 첫 번째 반복문의 조건은 i가 0
피보나치 수열을 구하는 문제다. 처음에는 재귀로 풀려 했는데, 피보나치는 재귀로 풀면 시간이 오래 걸린다는 교수님의 말씀을 떠올리고 반복문으로 풀었다. 다만, 문제는 1234567로 나눠야 한다는 사실...처음에는 배웠던 대로 tmp, current, last변수를 두
길이가 같은 배열이 두 개 있으면 각 원소를 곱한 다음 더해서 최소값을 만드는 문제이다. 여기서 곱한 숫자는 지워진다. A배열의 최소와 B배열의 최대를 곱한 다음 더하면 최종적으로 최소값이 나올 거라 생각했다. 때문에 algorithm에 있는 min_element와
문자열의 숫자 중 최소값과 최대값을 문자열로 반환하는 문제이다. 여기서 핵심은 문자열을 char로 바꾼 다음에 이를 atoi함수로 int형으로 바꾼 뒤 벡터에 넣어주는 것이다. 이 부분을 몰라 한참 헤맸다.문자열에 공백이 있다는 점을 주의하자. 만일 공백이 아니라면 문
주어진 숫자와 2진수의 1이 같은 최소값을 찾는 문제이다. 문제의 관건은 어떻게 이진수의 1의 개수를 찾느냐이다. 2로 나누면서 나머지가 1인 경우를 셀 수도 있지만, 나는 비트 연산자로 개수를 셌다. n과 n-1을 and로 취하면 맨 마지막 비트가 사라진다는 특성을
연속하는 숫자를 더해서 주어진 숫자를 얼만큼이나 만들 수 있는지 묻는 문제이다. 2로 나눠서(홀수는 n+1) 1부터 계속 더해주다가 값이 같으면 answer을 더해주고 주어진 값보다 크면 1부터 빼줘서 값을 맞춰주면 된다. 문제의 포인트를 생각할 수 없어서 인터넷을 찾
괄호'()'의 짝이 맞는지를 검사하는 문제다. 보자마자 스택으로 풀어야 겠다고 생각했다.일단 i의 길이까지 for문을 돌린다. 만일 여는 부분이 나온다면 스택에 넣고 닫는 부분이 나온다면 조건을 걸어서 여는 부분이 있는지 확인을 해준다. 이때 여는 부분 없이 닫는 부분
2월달에 토익 공부한다고 코딩 테스트에 신경을 못 썼다. 조금 놀기도 했고... ㅎㅎ. 3월도 됐고 휴학도 했으니, 취업 준비 겸 이것저것 하면서 다시 시작할 생각이다.벡터가 주어지는 데, 한 행에서 숫자를 고르면 다음 행의 같은 열은 못 고르는 방식으로 숫자를 선택한
2018 카카오 블라인드 테스트 문제다. 91%가 맞췄다고 하던데 왜 난 못 맞춘 거죠...? ㅠㅠ... 중간에 잠깐 쉬었다고 이렇게 되기 있냐고요... 여튼... 숫자를 n진수로 변환해서 정해진 순서대로 말하는 문제다(자세한 해석은 프로그래머스를 참고). 총 숫자 배
LZW에 관한 문제다. 첫 문자(w)부터 검사를 하는데, 만일 다음 글자(c)와 합한 값이 존재하지 않는다면 합한 값(w+c)을 사전에 넣고 다음 글자를 제거한 첫 문자(w)만을 출력하면 되는 것이다. 허프만 압축과 함께 학교에서 배웠던 적이 있어 문제 이해는 어렵지
2차원 벡터에서 1로 이루어진 정사각형의 크기를 찾는 문제다. 처음에는 아무리 생각해도 모르겠더라. 그래서 문제의 기본 아이디어를 찾아봤다.현재 위치에서 대각선, 위쪽, 왼쪽이 0이 아니면 세 수 중 가장 작은 수에다가 1을 더해서 현재 위치에 저장하는 방식이었다.어라
skill에 있는 알파벳 순서대로 skill_trees에 존재하느지 알아보는 문제이다. skill은 string으로 skill_trees는 string형 벡터로 주어진다. 이 문제에서 안 것은 skill_treesi일 때 skill_trees에 있는 i번째 단어의 j번
좌표평면(5,5)에서 게임 캐릭터가 움직이는 길이를 측정하는 문제다. 단, (5,5)를 넘어서는 안되고 같은 길을 반복해서 가면 움직이는 길이에 추가하지 않는다.처음에는 벡터 2차원으로 좌표를 생각하면서 풀었다. 그런데, 자꾸 두 번째 예제가 안 풀리는 거 아닌가. 그
2차원 배열을 만든 뒤 이를 늘어트려 해단하는 범위의 숫자를 뽑는 문제다. 오로지 이미지만 보고 코드를 짠다면 분명 틀린다. 왜냐면 내가 그렇게 해서 틀렸기 때문. 행과 열의 숫자 중 제일 큰 게 배열의 요소로 들어간다는 것을 이용해야 하는 문제였다. 틀린 풀이.정답
네오가 들은 곡을 주어진 곡과 비교해서 출력하는 문제다. 카카오 블라인드 테스트로 나온 문제로 \~\~~using namespace std;/using namespace std;/string change(string& m, map<string, char>& c_m
한 번호가 다른 번호의 접두어인 경우를 찾는 문제이다. 본래 해시로 푸는 문제인데 그냥 sort한 다음에 for문으로 돌려서 접두어를 비교해서 풀었다...먼저 phone_book을 정렬한 후 for문을 돌면서 i와 그 다음 번의 숫자의 접두어를 비교해 줬다. i의 문자
각 종류의 옷이 주어지는 데 서로 중복되지 않고 입을 수 있는 수를 찾으면 된다. 너무 어렵게 생각할 필요 없다. 고등학교 시절 배운 확률과 통계를 생각하면 간단하다. 상의가 2벌 하의가 3벌 있다면 2C1 \* 3C1 총 6개가 된다. 하지만 이 경우 선택하지 않음
업데이트 할 기능과 그 기능의 개발속도가 주어진다. A라는 기능과 B라는 기능이 있을 때 B라는 기능이 먼저 끝났어도 A라는 기능이 끝나지 않았기에 기다려야 한다. 그리고 A라는 기능이 끝나면 A와 B를 같이 배포한다. 한 번에 두 개가 배포되는 것이기에 값은 2다.스
프린터에서 우선순위 대로 문서를 출력한다. 이때 지정된 위치에 있는 문서는 몇 번째에 출력되는지 구하라. 숫자가 클수록 우선순위가 높다는 것을 조심하라.보자마자 큐로 풀어야겠다고 생각했다. 그러나, 핵심에서 막혔는데 우선순위 큐로 pair을 돌리면 같은 숫자를 처리하지
다리의 길이, 최대 무게, 지나갈 트럭의 무게가 주어진다. 이때 주어진 트럭의 순서대로 다리를 지날 수 있는 최단 시간을 구하시오.처음에는 굉장히 쉽다고 생각했는데, 그 이유는 다리를 지나는 트럭을 큐에다가 넣어서 구하면 끝이라고 생각했다. 현재 무게라는 변수에다가 다
주식 가격이 prices로 주어진다. 이때, 가격이 떨어지지 않는 초를 구하시오.내가 혼자서 풀었다. 내가 혼자서 풀었다고요!!! 예\~\~~앞에 들어온 prices가 먼저 나와야 하니까 큐를 쓰면 되겠다고 생각했다. 여기서 중요한 점은 뒤에 있는 prices와 비교해
스코빌 지수가 들어있는 배열을 받아서 제일 작은 스코빌 지수와 두 번째로 작은 스코빌 지수를 이용해 모든 수가 K보다 크게 만드는 문제다.힙을 이용해 푸는 문제다. 힙은 정렬된 이진수 트리로 부모 노드의 value가 자식 노드보다 크거나 같은 최대 힙과 부모 노드의 v
int형으로 받은 numbers를 가지고 새로운 숫자를 만들어서 가장 큰 숫자를 출력하는 거다.문제를 본 순간 순열로 풀면 되겠다고 생각했다. 그래서 next_permutation()을 이용했는데 시간 초과가 나왔다. 그래서 직접 순열 함수를 작성해서 풀었는데 여전히
H-index를 구하는 문제다. 총 논문 n편 중, h번 이상 인용된 논문이 h편 이상 나머지 논문이 h번 이하면 h의 최댓값이라고 한다(https://programmers.co.kr/learn/courses/30/lessons/42747처음에는 citatio
숫자로 주어진 문자열로 가능한 숫자를 모두 만들어서 소수의 갯수를 구해주는 문제다. 문자열을 모두 떼서 순열을 이용해 가능한 모든 수를 구해주고 소수를 검사해주면 되겠다고 생각했다. 다만, 문제가 있었으니 next_permutation()을 써도 괜찮을까였다. 저번 s
A로만 이루어진 문자에서 주어진 문자만큼 바꾸는 거다. 이때 조이스틱을 최소한으로 움직여야 한다.알파벳 바꾸는 횟수를 구하는 건 그리 어렵지 않았다. 나는 M을 기준으로 두고 M보다 아스키코드가 작으면 namei - 65를 M보다 크면 91(Z의 아스키 코드가 90이다
주어진 string을 가지고 k개의 수를 제거했을 때 최대 값을 리턴하는 문제다. 여기서 주의점은 숫자가 차례대로 나와야 한다는 거다.기본 아이디어는 있었지만 이를 구현하는데 많은 어려움을 겪은 문제였다.탐욕법에 분류된 것과 같이 차례대로 지나가면서 가장 큰 수를 뽑아
얼마나 적은 보트로 사람을 옮기는지에 대한 문제다. 보트의 무게 제한이 있고 무엇보다 보트에는 최대 2명밖에 못 탄다(근데 이 최대 2명은 딱히 필요가 없는 조건이었다. 하지만 나는 이 조건을 넣어서 푸느라 시간을 잡아먹었고...).당연히 내림차순으로 sort한 다음에
주어진 수를 차례대로 더하거나 빼서 target의 숫자를 구할 수 있는 식의 개수를 반환하는 문제다.깊이 우선 탐색(Dfs)를 쓰면 된다. 깊이 우선 탐색이란 한 방향으로 쭉 내려간 뒤 마지막에 도달하면 그 전의 값으로 돌아가 같은 일을 반복하는 거다. 이는 스택이나
인턴 시작 후 처음 제대로 푼 문제다. 저녁에 집에 오면 힘들어서 축 늘어져 있다. 그래서 공부는 아침에 하는 것으로...아무튼 뉴스 클러스터링은 문자를 둘 씩 끊어서 교집합과 합집합을 구한 다음에 자카드 유사도를 구하는 문제다. 일단 문장을 대문자 혹은 소문자로 바꾼
카카오 2020 블라인드 채용에서 나왔던 문제다. 이번에도 문자열을 잘라서 어떻게 하는 문제. 카카오는 문자열을 좋아하는 거 같다.그야말로 문자열을 압축하는데 최소의 길이로 압축할 수 있는 방법을 찾으라는 문제였다. aabbaccc를 예시로 들면 하나씩(2a2ba3c)
끝말잇기가 벡터로 주어질 때 몇 번째 사람이 몇 번재 차례에서 탈락했는 지를 구하는 문제다. 끝말잇기의 규칙에서 벗어나는 순간을 찾는 건 어렵지 않았으나 몇 번째 차례와 사람인지를 찾는 것이 조금 까탈스러웠다. 이 부분에서 우왕좌왕한 덕분에 시간을 잡아먹은 듯하다.제일
2019 카카오 블라인드 1차 코테에서 나왔던 문제다. 이번에도 문자열 파싱에 관한 문제다. 오픈 채팅방에 나올 안내 메세지를 리턴하는 거다. 이때 중요한 건 유저의 닉네임이다. 닉네임 변경에는 두 가지가 있는데, 하나는 채팅방을 나갔다 오는 것이고 또 다른 하나는 채
처음에는 문제를 이해하지 못했다. 어떤 순서대로 삭제하는지 모르겠고 띄어쓰기의 기준도 모르겠고..? 근데 그런 거 없는 문제였다. 그냥 붙어 있는 문자 두 개를 삭제해서 문자열이 완전히 제거되는지 알아보는 문제였다.괜히 복잡하게 생각해서 블로그를 보게 만들어... 가볍
연산자의 우선순위를 정해서 가장 큰 계산 값을 반환하는 문제다.기본적으로 dfs를 이용해서 연산자의 순서를 정한 다음에 스텍을 이용해 후위 수식 계산을 하면 된다고 생각했다.위의 아이디어로 풀었지만 자잘한 오류들 때문에 시간이 많이 걸렸다.String과 Characte
프로그래머스 8월 1주차 문제는 부족한 금액 계산하기다.N번 이용할 때마다, 비용이 N배가 되는 놀이기구가 있다. 현재 가지고 있는 돈으로 x번 이용할 때, 돈이 얼마나 부족한가? 만일, 금액이 부족하지 않다면 0을 리턴한다.먼저 반복문을 이용해 원하는 이용 횟수만큼
2차원 벡터로 이루어져 있는 점수 데이터가 있다. 이때, 열은 각 학생이 행의 학생에게 받은 점수를 의미한다. 스스로 준 점수가 최대이거나 최소일 경우 평균 값에서 제외하고 만일 중복되는 값이 있을 경우에는 그냥 합계로 친다. 이때, 평균의 A, B ... 를 구하라.
간단한 별찍기 문제다.
x와 n을 입력 받아, x의 간격이 있는 숫자 n개를 출력해 준다. 배열을 사용하나 싶었는데, 미리 vector solution이렇게 나와 있었다.
행렬의 열과 크기가 같을 때, 같은 열과 행을 더한 행렬을 리턴하는 문제이다.두 행렬과 리턴하는 행렬 모두 2차원으로 주어진다.2차원 행렬에 삽입은 어떻게 할까?가 제일 큰 문제였다. 검색해보니 2차원 행렬은 1차원 벡터의 합이라는 정보를 얻었다. 그래서 행(i)을 중
핸드폰 번호 뒷자리 4개를 빼고 앞 부분을 별표로 바꾼뒤 리턴하는 문제이다. 그렇게 어렵지는 않았다.다만, 잠시 헤맸던 이유는 phone_numberi = '\*'이 부분.큰 따옴표는 문자열을 의미하고 작은 따옴표는 단일 문자를 의미한다는 점을 까먹었다. 줄구장창 큰
들어가는 말 x를 x의 자릿수의 합으로 나눴을 때, 나누어 떨어지는 경우가 하사드의 수이다. 기본 아이디어는 x%10으로 자릿수를 나눈 다음에 전부 더해줘서 그걸 x로 나눠주면 된다. 여기서 나눠줬을 때의 값과 x의 값을 분리해야 한다는 중요 점이 있다. 그러니까,
배열에 들어간 정수들의 평균 구하기이다. 자료형에만 유의하면 뭐... 크게 어렵진 않았다.for문을 써서 자료의 합을 구한 다음에 나누기를 했다. 이때, 나누는 값이 실수형이여여 한다는 점에 주의하자.
주어진 수가 1이 될 때까지 계산을 반복해서 그 횟수를 리턴하는 문제이다. 계산 자체는 간단했지만, 후술할 자료형 문제 때문에 잠시 버벅였다.while문을 써서 x가 1이 아닐 경우에만 반복했다. 다만, n이 626331일 때에서 자꾸만 이상한 값이 나오는 것이다. 질
정수 num이 짝수면 "Even", 홀수면 "Odd"를 리턴하는 값이다.처음에는 if문으로 풀었고 다음은 삼항연산자로 풀었다. 삼항연산자가 더 예쁜 듯.
받은 배열 중, 가장 작은 수를 제거한 베열을 출력하는 방식이다. 나는 for문으로 제일 작은 수를 찾고 작은 수를 빼는 방식을 사용하였다. 문제를 풀고 찾아보니 배열의 최소값을 찾는 함수가 있단 걸 발견... 첫 for문은 최소 값을 찾는 거고 두 번째 for문은 최
정수 n이 어떤 양의 정수 x의 제곱인지 판별해서, 만일 그렇다면 n+1의 제곱근을 출력하고 아니라면 -1을 출력하는 문제이다.sqrt와 pow함수를 쓰기 위해 헤더를 추가해줬다. 먼저 sqrt함수로 n이 어떤 x의 제곱근인지를 파악한다. 다음에 if가 중요한데, 만
정수형으로 받은 숫자들을 정렬해서 하나의 내림차순으로 된 정수를 반환하는 방법이다.총 네개의 파트로 나눠진 걸 볼 수 있다. 첫 번째는 변수들 모아 놓은 파트. answer은 출력할 답, v1은 숫자들을 정렬하기 위한 벡터, tmp는 정렬할 때(버블 정렬 이용) swa
받은 자연수를 뒤집어서 배열에 넣고 리턴하는 문제이다.간단하게 answer의 배열에 자연수를 10으로 나눈 나머지를 넣고 n의 수를 뒤에서부터 줄여주면 된다.
정수를 입력받아서 각 자릿수의 합을 구하는 문제이다.자릿수를 구하는 방식은 언제나 해줬던 거처럼 while문에다가 각 자릿수를 나눠서 더해주면 도니다.이 문제를 문자열로 푼 사람이 있다. 정수 n을 문자열로 변환하고 앞에서부터 더해주는 데, '0'을 빼줘서 아스키 코드
입력받은 정수의 약수를 구해서 전부 더하는 값을 출력하는 문제이다.약수는 나눠서 나머지가 0이 되는 값이다. i를 1부터 n까지 반복하면서 나눠주는데, 나머지가 0이 되는 조건을 걸어 약수를 벡터에 넣어준다.다음, 벡터의 크기만큼 약수들을 더해주면 된다.
문자열을 받아서 정수로 변환하는 문제이다.문자열을 정수로 변환하는 함수가 있지 않을까? 생각해서 찾아보니 있었다. stoi(문자열).stoi 함수를 사용하지 않을 경우 반복문을 이용해서 풀어주면 된다. 만일 si가 '0'보다 크거나 같고 '9'보다 작거나 같을 경우.
정수 n을 받아서 n만큼 수박을 차례대로 출력하는 것이다. 짝수에는 '수', 홀수에는 '박'이라고 생각하면 쉽다.for문을 n번까지 돌려서 짝수이면 "수"를 더해주고 홀수이면 "박"을 더해준다. 처음에는 삽입을 위한 함수를 따로 써야 하나 싶었지만, 알고보니 '+'기호
1부터 n까지 범위의 소수 갯수를 반환하면 되는 문제다. 1은 소수가 아니니 제외한다.소수 찾는 문제는 에라토스테네스의 체를 사용하면 쉬이 풀 수 있다는 걸 알아냈다. 에라토스테네스의 체는 어떤 수의 배수이면 소수가 아닌 아이디어에서 나왔다. 즉, 4는 2의 배수이므로
string형 배열 seoul에서 김을 찾는 문제이다. 처음에는 이해를 못해서 한참을 헤맸다. jane이 있고 kim이 있을 때 kim의 배열 위치를 찾아내라는 문제였다. 다만, 왜 jane이 있는지 몰라 한참 당황했을 뿐...문제 이해가 당혹스러웠지, 문제 자체는 그
문자열 크기가 4혹은 6이고 숫자만 있으면 true, 그 외에는 false를 출력하는 문제이다. 아까의 김씨 찾기 문제와 같이 문제 이해가 정확하게 되지 않아 혼란스러웠다. 먼저 크기가 4혹은 6이 아니면 실패로 한 뒤, 바로 정답을 리턴해준다. 내가 헷갈린 게 이 i
문자열을 내림차순으로 비치하는 문제이다.문자열 문제만 나오면 뭐랄까... 긴장이 된다. 다른 숫자들처럼 해주면 되는 걸 아는데, 묘하게 어색하단 말이지. 뭐, 버블 정렬을 이용해서 정렬해주었다. 처음에는 sort함수를 쓰려 했으나 자꾸만 컴파일 에러가 나서... 그냥
문자열 내 p와 y의 개수를 세서 그 값이 같으면 true, 다르면 false를 반환하는 문제이다. 이때 소문자와 대문자는 구별해주지 않으며 p와 y가 없을 경우 true이다.조금은... 아스키 코드에 익숙해졌다. y와 p는 각각 알파벳의 갯수로 지정해 주었다. 다음
미리 답을 보는 걸 좋아하지는 않지만, 도저히 문제 감을 못 잡아서 미리 답을 봤... 다... ㅎㅎ. 헤헷... 덕분에 sort()의 기능을 확실하게 알았다. 비록 풀이는 100% 내 실력은 아니지만, sort()에 대해 이해했으니 된 거 아니오! 히힛...sort함
그야말로 두 정수 사이의 합을 구하면 된다. 주의할 점은 a가 무조건 크지 않다는 것이다.a가 b보다 클 경우 b를 처음부터해서 a까지 더해주고 아닐 경우 반대로 해주게 했다.저렇게 a가 크냐 b가 크냐 계산하지 말고, 큰 값을 a에 작은 값을 b에 넣어 a부터 b까지
정수 divisor을 제공할 때, divisor로 나눠 떨어지는 값들을 오름차순으로 정렬하는 문제이다. 만일 나눠 떨어지는 값이 없다면 배열에다가 -1을 넣어준다.일단 주어진 배열을 전부 돌면서 divisor로 나눠 떨어지는 값을 answer 배열에다가 넣어 주었다.그
각 단어마다 짝수는 대문자, 홀수는 소문자로 바꿔주는 문제이다. 푸는데 시간이 오래 걸렸는데, 그 이유는 테스트 값이 모두 소문자로 주어질 줄 알았다. 그래서 짝수만 대문자로 바꿔줘서 계속 틀렸다. 틀린 이유를 정확하게 모른 나는 엉뚱한 곳에서 삽질을 한참했고... 문
알파벳을 주어진 n만큼 뒤로 밀어서 암호화하는 것을 시저 암호라고 한다. a를 1개 밀면 b가 되고 z를 2개 밀면 b가 되는 것과 같은 이치다. 이때, 공백은 그냥 유지한다.반복문 for을 0부터 문자열 끝가지 돌린다. 값이 공백일 경우 continue로 암호화를 생
가운데 글자를 가져오는 거다. 짝수면 두 글자를 가지고 온다.짝수와 홀수일 때를 구분했다. 홀수이면 나누기 2한 값의 위치를 가지고 오면 되고 짝수면 -1과 나누기 2한 값을 가져오면 된다.다른 사람들의 풀이를 보니 substr()이라는 함수를 썼더라. substr()
중복되는 숫자를 삭제하고 출력하는 방식이다.1부터 시작해서 앞의 숫자와 뒤의 숫자가 다를 경우 answer값에 넣어주는 방식을 취했다. 1부터 시작하기 때문에 반복문이 시작하기 전 0은 미리 넣어주었다.erase함수를 쓰려했는데 뭐가 문제인지 잘 안 됐다(힝...).
2016년 a월 b일은 몇 요일일까를 맞추는 문제이다. 이때, 2월은 29일이라는 걸 주의해야 한다(!!!).일단 2016년 달의 날자를 모두 month벡터에 넣어줬다. 1월부터 할 거기 때문에 앞에 0을 넣어 0에는 값이 없도록 했다.다음은 요일을 벡터로 넣어줄 차례
2018년 카카오 블라인드 테스트에 나왔던 문제이다. 내가 처음으로 푼 코딩 테스트 기출 문제이기도 하다. 조건에 맞는 계산을 하면되는 문제로 그렇게 어렵지는 않겠다... 생각했지만 어려웠다(ㅠㅠ). 제일 큰 문제는 10이 나왔을 때였는데, 10을 어떻게 처리하면 좋을
두 지도를 겹쳐서 새로운 지도를 만드는 문제이다. 십진수가 입력되면 이를 이진수로 바꾸어서 1이 하나라도 나오면 이거 내가 풀었다. 물론 제일 쉬운 문제라고 하지만, 쨋든 내가 스스로 풀었다!!!! 아까 다트 던지기가 많이 쓰라렸나 보다. 후후... 아하하하하하하하하하
각 수들을 더한 값을 오름차순으로 중복 없이 구하는 문제이다.먼저 이중 반복문을 사용해서 숫자를 하나씩 더해준다. 총 다섯개라고 가정하면, 밑의 계산이 된다.0+1 ~ 0+41+2 ~ 1+42+3 ~ 2+43+4그 다음 값들을 sort함수로 정렬한 후, erase(un
주어진 예산 안에서 제일 많은 부서를 챙겨주는 문제이다. 여기서 부서가 신청한 금약은 줄어들거나 늘어나지 않는다.이 문제를 보고 제일 먼저 생각한 건 잔돈 거슬러주기 알고리즘이다. 잔돈 거슬러주기는 제일 큰 값부터 골라 예산을 맞췄는데, 최대한 많은 부서가 포함되어야
10진법을 3진법으로 바꾼뒤 앞뒤 반전을 주고 다시 십진법으로 바꿔주는(ㅋㅋㅋㅋㅋㅋ) 문제이다.3진법을 구하는 건 거의 처음이었지만, 비밀지도때 2진법 구했던 거처럼 3으로 나눠서 나머지는 넣어주고 값은 계속 3으로 나눠주면 된다.다시 10진법으로 돌릴 때, 수식을 잘
약수의 갸수가 짝수이면 그 값을 더해주고 홀수이면 빼주는 문제다.처음에는 벡터로 풀려 했으나, 가만 보니 벡터를 사용하지 않아도 충분히 풀 수 있는 문제였다.이중 반복문을 사용할 건데, 첫 반복문은 left부터 right까지 가는 반복문. 두 번재 반복문은 1부터 해당
2019년 카카오 블라인드 테스트다. 실패율을 계산해서 내림차순으로 정렬하고 실패율이 같으면 오름차순으로 정렬하는 문제. 실패율을 구하는 건 어렵지 않았지만, 정렬할 때 애를 먹었다. 반환을 인덱스로 해줘야만 하기 때문. 이래저래 어렵게 풀었고 다른 사람들의 풀이도 참
선택할 수 있는 폰켓몬(포켓몬이 아니라 폰켓몬이다. 아마, 저작권때문에 그런 듯ㅋㅋㅋㅋㅋ)의 범위에서 얼마나 많은 종류의 폰켓몬을 선택하느냐의 문제다.제일 먼저 선택할 수 있는 폰켓몬을 쉽게 알기 위해 정렬을 해서 중복되는 수를 삭제했다. 다음 선택 가능 수가 폰켓몬의
체육복을 도난당했다. 하지만, 여벌을 가지고 있는 사람이 도난당한 사람에게 체육복을 빌려줄 수 있다. 단, 체육복을 빌려주는 것은 인접한 번호끼리며 여벌을 가진 사람이 체육복을 도난당할 수 있다. 후자의 경우 체육복이 하나뿐이라 다른 이에게 빌려주지 못한다.그리디 알고
배열이 두 개 주어진다. 두 번째 배열의 i부터 j까지 첫 번째 배열에서 가지고 와서 오름차순으로 정렬한 뒤 k번째 숫자를 반한하는 문제이다.정렬 문제 답게 오름차순으로 정렬하는 방법이 나왔다. 그리고 정렬에서 곤란에 처했다. 정렬을 못해서 버벅거린 게 아니다. 케이스
세상엔 똑똑한 사람들이 많고 난 왜 엉뚱한 문제로 시간을 날렸나... 하는 문제. 이걸 1시에 잡았는데 자꾸만 에러가 나서 해가 지고 나서야 풀었다. 그런데, 문제는 겁나 사소한 거... ㅠㅠ. 너무 사소해서 눈물이 나... 저번에 second를 first로 넣어줬던
완주하지 못한 선수를 찾는 문제이다. 다만, 배열이 정렬되어 있지 않다는 점을 생각해야 한다.참가자와 완주자의 배열을 정렬해준다. 그리고 하나씩 비교를 하다 보면, 서로 다른 값이 나오는 순간이 있을 것이다. 참가자 중에 완주를 못한 사람이 있다는 의미이니 그 참가자를
int형과 bool형으로 배열이 두 개 주어진다. 만일 bool값이 거짓이면 int의 해당하는 값에 -를 붙여주고 아니라면 그냥해서 더해준다.반복문을 돌리면서 값이 참으면 그냥 벡터 v에 넣어주고 거짓이면 -1을 곱해서 넣어준다. 다음, v를 모두 더해주면 된다.
a에다가 b를 곱해서 전부 더해주는 값을 출력해준다.for문을 돌리면서 조건대로 수식을 만들어서 출력하면 된다.
최근에 문제를 많이 풀지 못했는데, 그 이유는 바로 개강을 했기 때문이다. 개강한 대학생은 개강해... ㅠㅠ. 중간고사가 끝나고 시간이 좀 남아서 문제를 푼다. 물론 다음 주차로 넘어가면 어떻게 될지 모르는 일이지만.나머지를 1로 만드는 수 중에서 제일 작은 수를 찾는
숫자 벡터가 주어지는데, 0에서 9까지 없는 숫자를 구해서 더하면 되는 거다.먼저 0에서 9를 가지고 있는 벡터(n)를 하나 생성했다. 다음, 이중 반복문으로 주어진 벡터(numbers)와 비교하면 만일 같은 숫자가 있을 경우 n에서 값을 지운다. n에 남아있는 값을
여러 크기의 명함이 주어졌을 때, 모든 명함이 들어가는 가장 작은 크기의 지갑을 찾는 문제이다. 이차원 벡터로 가로와 세로가 주어지는데 가로와 세로를 나눠서 생각하면 곤란하다. 열을 기준으로 긴 것을 가로로 두고 나머지 것을 세로로 둬서, 둘 중에 제일 긴 것을 고르면
크레인 인형뽑기 게임은 2019 카카오 개발자 겨울 인턴십 문제다. 인형이 들어간 2차원 벡터 board가 주어지고 어느 번째 인형을 뽑는지에 대한 moves가 1차원 벡터로 주어진다. 우리가 할 일은 moves 위치에서 맨 먼저 있는 인형을 뽑아 옮기고 만일 앞뒤로
2021년 카카오 채용연개형 인턴십 코딩테스트에서 나왔던 문제다. level이 1인데 왜 안 풀었는지 의문이다. 그때는 어려워서 안 풀었나? 지금은 풀 수 있는데 ㅎㅎ. 암튼 문자와 숫자가 혼합된 문장이 주어질 때 이를 오로지 숫자로 바꿔서 리턴하는 문제다. 처음 본
아이디를 규칙에 맞게 만들어서 새로운 아이디를 제시하는 문제다. 노가다로 하면 그렇게 어렵지 않았다. 하지만... 노가다와 어렵지 않다에서 문제가 있었으니...바로 테스트 케이스는 전부 맞는데 제출 후 채점하기에서 틀린 문제가 나오는 것이다! 내가 이거 때문에 한 시간
예전에 푼 적이 있는 카카오의 실패율이다. 전에는 C++로 풀었다면 이번에는 java로 풀었다. 기본 풀이는 알고 있었지만, 구현에 어려움을 겪었던 이유는 바로 java에서 pair을 구현하는 거 때문이었다. C++과 다르게 java는 버전에 따라 pair을 제공하지
스택을 구현하는 문제이다.c++ 스택을 찾아보니 이미 구현이 된 헤더 파일이 있다는 걸 발변했다. 처음에는 stack 헤더 파일을 포함해서 풀었는데 런타임 에러... 그래서 일단 vector로 풀고 다음에는 stack으로 풀었다. 나중에 stack으로 풀 때는 맞더라.
스택을 이용해서 푸는 문제이다. 만일 값으로 0이 들어오면 제일 마지막 수(아까 전에 들어온 수)를 제거해 준다. 그렇게 총 n번 반복한 후에 스택에 남은 값들을 전부 더해준다.만일 값이 0이 아니면 값을 넣어주고 0이면 아까 전에 넣었던 수를 빼준다. 마지막으로 벡터
괄호()가 제대로 존재하면 YES를 존재하지 않으면 NO를 반환하는 문자이다.stack을 쓸까 고민하다가 vector을 썼다. 먼저 몇 번 반복되는지 t를 받아준다. 다음 t만큼 string을 받는데, 여기서 저장할 벡터는 char이다. string의 문자 하나하나(s
괄호 문제에서 대괄호가 포함된 거다. 하지만, 젠장... 진짜 하... 소문자 출력을 대문자로 해놓고 거의 1시간 동안 엉뚱한 곳에서 허우적댄 나를 생각하면...괄호 문제에서 잠시 머뭇거렸던 부분이 있다. 벡터가 비어 있으면 괄호가 정상인 것을 의미하는데, ')'가 마
큐를 구현하는 방식이다. 다행히(?) C++에는 헤더 queue로 구현이 되어 있기에 그리 어렵지는 않았다. 특히 배열로 큐를 구현하면 자료를 밀어줘야 해서 복잡한데, 그냥 queue에 있는 함수로 간단하게 구현했다.스택에서 구현한 방식과 동일하게 했다. 다만, 다른
1부터 N번까지 카드가 들어있는데, 첫 번째 카드를 지우고 다음 카드를 뒤에 넣어준 뒤 또 첫 번재 카드를 지우고... 뭐 이런 규칙을 반복해서 마지막 남은 카드를 찾는 문제이다.queue 헤더를 포함해서 풀었다. 먼저 1부터 n까지 숫자를 큐에 삽입한 후 삭제, 삽입
n명의 사람들이 있을 때, k번째의 사람을 제거하는(?!) 문제이다.일단 n과 k를 받은 후, 큐 q에다가 1부터 n까지의 숫자를 집어 넣는다. 다음에는 while도 큐가 비어있지 않을때까지 돌리면서 조건을 실행해준다. k번째를 제거해야 하는데, 문제는 큐에서는 ind
간단하게 말하자면, n번째 우선순위에 있는 일이 몇 번째에 실행되느냐에 대한 문제다. 우선순위 큐를 사용하면 더욱 쉽게 접근할 수 있다. index가 필요한데, 문제는 큐에서는 인덱스를 지원하지 않는다는 점이다. 이는 카카오 코딩 테스트에서 배운 pair의 방식을 사용
덱이란 큐를 기본으로 두고 앞과 뒤에서 삽입, 삭제가 가능한 자료구조이다. c++이라면 deque를 포함해서 사용할 수 있다.문자열을 받아서 비교하면서 필요한 명령문을 실행하도록 했다. 속도를 빨리하기 위해 cin.tie(0);cin.sync_with_stdio(0);
원형 큐에서 원하는 원소들을 최소한의 움직임으로 뽑아내는 문제이다.deque를 사용했으며, 왼쪽 혹은 오른쪽으로 돌리다가 맨 앞에 원하는 원소가 오면 멈춘 후 count를 출력해준다.왼쪽으로 옮기는 방식과 오른쪽으로 옮기는 방식 그리고 어떤 기준으로 옮길지를 혼자 구했
A1에 있는 숫자가 A2에 있다면 1을 없다면 0을 반환하는 문제다.총 두 가지 방법으로 풀 수 있는데, 하나는 반복문이고 또 하나는 해시다. 먼저 반복문으로 풀려면 A1에 숫자를 하나 가지고 A2의 숫자와 비교를 할 때 만일 같은 숫자가 있다면 flag를 true로
다시 백준으로 돌아가기로 했다. 프로그래머스 level 2 카카오 기출 문제는 지금 실력에서 풀 수 있는 문제는 다 푼 듯하다(남은 문제 중 몇몇 개를 시도했고 풀이까지 봤지만 확실히 이해되는 문제가 없었기에). DFS, BFS 등은 아직 실력이 안 되는 것 같기에..
괄호가 올바른지 확인하는 문제로 스택을 이용하면 간단하게 풀 수 있었다. 그러나... 분명 맞게 푼 거 같은데 자꾸만 런타임 에러가 나는 거 아닌가. 고치고 또 고쳐도 런타임 에러는 계속 났다. 도대체 왜?! 그러다가 대단한 실수를 발견했으니... 바로 string s
스택에 수를 넣고 주어진 수열을 어떻게 만들 수 있는지를 구하는 문제이다.예를 들어 수열 '4, 3, 6, 8, 7, 5, 2, 1'이 주어졌을 때, 차례대로 수를 넣어주다가 top이 현재 수와 같으면 pop을 해주면 되는 문제다. 처음에는 문제가 무엇을 말하는지 몰라
간단한 한 문장 에디터를 출력하는 문제다. 문제가 stack에 분류되어 있기도 했고 본래는 stack 혹은 list로 풀어야 하지만 나는 제일 먼저 vector로 풀고 싶었다. 시간초과가 날 것을 알고 있었지만 그래도 vector로 풀고 싶었다...처음에는 받는 문자열
숫자가 원을 이루고 있을 때 K번째 수를 출력하는 요세푸스 문제다. 처음에는 나머지를 이용해서 풀어야 하나 싶었다. 그러나 이 문제는 큐를 이용하면 훨씬 쉽게 풀 수 있었다. K번째 숫자는 K-1개의 숫자의 뒤에 있기 때문에 K-1개의 숫자를 뒤로 보내고 K번째 숫자를
deque를 이용해서 덱을 프로그래밍하는 문제다. 헤더 파일로 주어진 deque를 이용하면 되기에 그렇게 어려운 문제는 아니었다.코드의 주석에 설명했다.
저번에 풀었던 단어 뒤집기와 유사한 문제다. 그러나 괄호에 있는 문자는 tag로 지정해 뒤집기를 하지 않는다는 점에서 복잡해졌다.처음에는 tag에 있는 단어만을 떼서 출력해주고 그 나머지를 stack에 넣는 방식을 사용했다. 그러나 이 방식은 너무 복잡해서 풀기가 어려
조건 1, 2, 3이 주어질 때 정수 x를 가지고 얼마나 적은 조건으로 1을 만들 수 있는 지에 관한 문제다. 조건 1은 'x가 3으로 나눠 떨어지면 3으로 나눈다', '조건 2는 x가 2로 나눠 떨어지면 2로 나눈다', '조건 3은 1을 뺀다'이다.다이나믹 프로그래밍
주어진 후위 표식기를 계산해서 값을 소수점 둘째 자리까지 출력하는 문제다.먼저 피연산자의 개수 N이 주어진다.그리고 후위 표식기가 주어지는 데, 이때 피연산자는 각각 알파벳 대문자로 표현된다.그리고 다음 줄에는 각 알파벳 대문자에 대응하는 피연산자가 입력된다.이 문제에
들어가는 말 알고력과 코딩력이 주여졌을 때, 문제들을 전부 풀 수 있도록 알고력과 코딩력 실력을 쌓는 최소 시간을 구하는 문제다. 알고력과 코딩력은 각각 1시간씩 공부하면 1만큼 실력이 올라가고 문제를 풀면 주어진 시간이 지나면 주어진 숫자만큼 실력이 올라간다. 단,
1부터 n까지의 숫자들 중에 숫자를 하나 선택하고 이를 pick이라고 한다. pick을 모르는 상황에서 pick를 구하는 문제이다. 이때 상속받은 클래스 GuessGame에서 메소드 guess는 들어온 숫자가 pick과 같으면 0을, 보다 작으면 1을, 크면 -1을 반
두 개의 사각형 범위가 주어질 때, 정사각형들의 전체 범위를 구하는 문제다. 즉, 'A사각형 + B사각형 - A와 B의 공통 범위'를 구하는 문제1) 두 사각형의 크기 구하기1-1) 문제에서는 각 변수들의 크기가 1<=2라고 했다. 그러므로 두개의 사각형을 구할
문제 자체는 그리 어렵지 않았지만, 문제를 이해하는 게 어려웠던 문제... 특히 영어로 되어 있어서 더더욱...간단하개 말해서 오로지 2, 3, 5로만 나눠지는 수를 구하는 거다. 해당 수를 Ugly Number로 지칭하는데 왜 그런지는 모르겠다...여기서 주의해야 할
n을 나타낼 수 있는 제곱수 합의 최소 갯수를 구하는 문제다. 처음에는 1부터 전부 해보려고 했는데(브루트포스) 범위가 10^4라는 걸 보고 관뒀다. 대신 dp로 풀어야 겠다고 생각했다.dp로 풀 때는 언제나 1부터 주어진 수로 다가간다고 생각해야 한다. 이미 구해 놓
주어진 이차원 베열에 스도쿠 게임이 가능한지 알아보는 문제다.스도쿠가 가능하려면 가로와 세로, 그리고 3x3 박스에 숫자가 1부터 9까지 중복되지 않고 들어가야 한다.가로의 경우 주어진 배열을 가지고 검사할 수 있지만, 세로는 따로 배열을 만들어서 검사를 했다. 그리고
특정한 알고리즘으로 풀기 보다는 조건을 따지면서 푸는 문제였다.일일이 확인을 해야 하는 문제이기에 여기서는 자료구조가 중요했는데, ArrayList에도 필요한 기능이 있긴 하지만 Set이 해당 기능을 가지고 있으며 시간도 더 빨라 Set을 사용했다.중요한 건 조건을 잘
배열 숫자의 갯수가 중복이 안 되면 true를, 중복이 되면 false를 반한하는 문제다. 특정한 알고리즘 없이 HashMap과 HashSet 자료구조를 이용해서 풀었다.먼저 숫자가 얼마나 반복이 되는지르 알아야 한다. 이때는 HashMap을 이용한다.그리고 반복된 갯
들어가는 말 길이가 짝수인 문자열이 주어졌을 때, 절반을 나눠서 소문자 모음과 대문자 모음의 갯수를 세준다. 만일 그 갯수가 같다면 true를 아니면 flase를 반환한다. 코드 설명 문자를 두 개로 나눠준다(아니면 절반 인덱스를 찾아서 바로 반복문을 돌려줄 수도 있
BST가 주어졌을 때, low와 high 사이에 있는 값들을 모두 더해서 리턴하는 문제다.첫 번째트리를 전부 돌아서 그 값을 set에 넣고 set을 탐색하는 방식을 사용했다. 하지만, 문제를 푸는데 굳이 set이 필요하지는 않다.두 번째BST를 돌면서 만일 해당 값이
두 트리의 단말 노드의 개수와 순서가 같으면 true를, 다르면 false를 반환하는 문제다. 처음에는 두 트리를 함께 DFS로 돌려서 확인하려 했지만, 단말 노드가 같으나 부모 노드가 다른 경우가 있어서 따로따로 돌려서 비교해줬다.1\. 일단 단말 노드를 넣을 리스트
이진 트리에서 두 값을 뺀 절대값이 최대가 되도록 하는 문제다. 단, 여기서 두 값은 부모와 자식의 관계로 이루어져야 한다.최대값과 최소값을 구해서 빼주면 된다고 생각지만, 단순히 전체 탐색만을 적용할 경우 최대값과 최소값이 부모 자식의 관계가 아닐 수 있다.이 부분을
백준의 주어진 상자로 새로운 상자 만들기와 비슷한 문제다. 여기서는 계단을 오른다고 나와 있지만, 간단하게 말해서 1과 2로 주어진 n을 만드는 갯수를 구하는 거다.지금까지 해왔던 대로 DP를 이용해서 풀면 된다.1과 2로 1을 만드는 경우의 수는 1이다. 1과 2로
0부터 n-1까지 잠긴 방이 있다. 각 방에는 다른 방을 열 수 있는 열쇠 다발이 존재하는데, 이를 이용해서 모든 방을 열 수 있다면 true를, 아니라면 false를 반환하라.0번째 방은 미리 열어둔다고 가정한다.필요한 자료구조boolean\[] room, 일단 방이
앙몬드가 표를 편집한다고 한다. D는 커서를 위로 올리고 U는 커서를 아래로 내리며 C는 해당 커서가 가리키는 부분을 지우고 Z는 가장 최근에 삭제한 값을 예전 위치로 돌린다고 한다. 이때, 표에 존재하면 'O'를 존재하지 않으면 'X'를 표시해서 반환하라.링크드리스트
여행 계획 짜느라고 공부에 소홀했다. 근데 그 여행도 못 가게됬다는 게 함정... 아, 공부를 열심히 하자.단어의 대, 소문자가 올바르게 되어 있는지를 확인하는 문제다. 올바르면 true를, 올바르지 않으면 false를 반환한다.0\. 필요한 자료구조딱히 없음..?1\
task가 주어질 때, 같은 레벨에 있는 task를 두 개에서 세 개씩 처리해 최소 수행 횟수를 구하는 문제다. 만일 두 개에서 세 개씩 처리가 불가능하면 -1을 반환한다.수학 문제다0\. 필요한 자료구조0-1. 같은 레벨의 task의 개수를 구하는 HashMap1\.
풍선들이 존재하는 범위가 주어질 때, 하나의 화살로 해당 범위 내의 모든 풍선을 터트릴 수 있다고 한다. 이때 사용하는 화살의 최소 개수를 구하여라.그리디 알고리즘을 이용한다. 그리고 그리디 알고리즘은 대체적으로 정렬이 필요하다. 그러나 이때 단순히 o11 - o21을
이번에도 그리디 알고리즘이다. 주어진 코인으로 얼마나 많은 아이스크림을 살 수 있는지 구하는 문제. '얼마나 많은'이라고 했으니 아이스크림들을 오름차순으로 정렬해서 범위가 되는 것까지 넣어주면 된다.0\. 변수들0-1. answer, 정답을 저장하는 변수(살 수 있는
x와 y의 좌표가 주어질 때, 선으로 만들 수 있는 최대한의 점 개수를 구하는 문제다. 간단한 수학 문제인 줄 알았지만, 실은 더 복잡했던 문제.점과 점의 atan2 값을 구해가지고 만일 그 값이 같다면 이는 한 직선에 있다는 의미이므로 해당 값의 점의 수에다가 1을
이진 트리가 주어졌을 때 전위 순회의 순서를 구해서 리스트에 넣어 반환하는 문제다.전위 순회(preorder traverse)부모 노드 -> 왼쪽 자식 노드 -> 오른쪽 자식 노드중위 순회(inorder traverse)왼쪽 자식 노드 -> 부모 노드 -> 오른쪽 자식
두 개의 트리가 주어질 때, 두 트리가 같은지를 보는 문제이다.여기서 중요한 점은 노드의 위치와 노드가 가지는 값이 모두 같아야 한다는 거다. 그렇기에 평소대로 쓰던 dfs나 bfs를 그대로 쓸 수가 없다. 노드의 위치까지 고려를 해줘야 하기 때문이다. 또한 null
두 개의 숫자를 가지고 M을 만들 수 있는 방법이 얼마나 있는지 구하는 문제다.투 포인터 문제!다만, 비슷한 문제는 많이 풀어봤어도 이렇게 투 포인터라고 의식해서 푼 건 거의 처음 아닐까...그리고 주의해야 할 점이 있는데 바로 누적합이 아니라는 거다. 두 숫자를 더
이진 수를 더하는 문제다. 간단하게 보일 수 있지만, 이진수를 어떻게 더하는지 모르면 제대로 못 푸는 문제다 그게 바로 나예요... 물론 지금은 알았다ㅎㅎ이진 수란 0과 1로 이루어진 숫자로 둘이 더했을 때 2가 되면 1을 넘겨준다.파랗게 표시된 부분이 1을 넘겨주는
문제 설명 한 문장이 다른 문장의 접두어인지를 구하는 문제였다. 간단하게 풀 수 있을 줄 알았지만, 자꾸 효율성을 통과하지 못했던 문제. 아마 배열 정렬을 쓰고 2중 반복문을 써서 그렇지 않을까 싶다. 문제 풀이 다른 사람의 풀이를 보니 startsWith()라는 함
깊이 우선 탐색과 함께 dp, 비트마스크를 이용해야 한다.깊이 우선 탐색만 할 경우 시간초과가 난다.깊이 우선 탐색으로 푼 코드
숫자가 들어간 배열이 주어지는데 여기에서 숫자 세 개를 뽑아서 0이 되는 경우의 수를 구하는 문제다.깊이 우선 탐색으로 숫자 세 개를 골라서 더한 다음에 0을 확인하는 방법으로 접근했다. 그러나 여기서 문제가 발생했는데, 숫자가 같고 순서가 다르면 서로 다른 값으로 인
꽃이 n개 주어질 때 꽃들이 없는 위치인 0에 서로 붙여 놓지 않고 둘 수 있는지를 구하는 문제다.처음에는 나눗셈의 나머지인가 생각을 했다. 무언가 규칙이 있을 거라 생각했지만, 절대 보이지 않았 다른 사람들의 풀이를 참고했다...그냥 반복문으로 풀면 되는 문제였다..
배열이 주어지는 데, 이때 0으로만 이루어진 배열의 갯수를 구하는 문제다. 여기에서 0의 순서는 바뀌면 안 된다.처음에는 컴비네이션을 생각했다.0이 만일 총 3개가 뭉쳐 있다면 3C1 + 3C2 + 3C3 이렇게... 왜 그렇게 어렵게 가십니까? 그러기 위해서 팩토리얼
노드의 개수 n과 edge가 주어졌을 때, 해당 edge를 이요해서 모든 노드를 연결하는 횟수를 구하는 문제다.문제만 보면 엄청... 복잡할 거 같지만 실제로는 굉장히 쉬운 문제다.처음에는 사이클을 찾아서 중복되는 edge를 하나씩 옮겨줘야 한다고 생각했다. 그냥 문제
방향 그래프가 주어졌을 떼 모든 노드가 0으로 가기 위해서 얼마나 적은 도로의 방향을 바꾸어야 하는지 구하는 문제다.hint그래프를 무방향으로 생각하세요. 루트에서부터 dfs를 시작하는데, 만일 당신이 정방향(앞으로 가는 거, foward)으로 edge를 이동한다면 당
서로 연결되지 않는 노드의 조합의 개수를 구하는 문제다.일단 부분 그래프를 구성하는 노드의 개수를 알아야 겠다고 생각했다. 그 후에 각 부분 그래프의 노드의 개수를 조합으로 계산해서 풀겠다는 계획이었다.위의 풀이는 정답은 나왔으나 시간 복잡도를 해결하지 못했다. 아마
food 배열이 주어지는 데, 이때 foodi는 음식 i가 foodi만큼 주어졌다는 것을 의미한다. 여기서 i가 0일때는 물이고 food0은 무조건 1이다.문자열 가운데 0을 두고 대칭으로 숫자 문자열을 구하라는 문제다.먼저 각 대회의 음식을 개수가 홀수이면 하나 빼주
mxn 배열이 주어졌을 때, 오른쪽 혹은 아랫쪽으로 움직여서 (0,0)에서 (m-1, n-1)까지 가는 최솟값을 찾는 문제다.당연히 너비 우선탐색일 거라고 생각했다. 그래서 원래 풀던 대로 풀었더니 시간 초과가 났다. 엉..?아, 오른쪽하고 아래만 갈 수 있으니까 2차
기차 여행을 하는 날짜가 주어진다. 얼마나 이동할 수 있는지에 대한 기차표 가격이 주어졌을 때, 제일 적은 값으로 이동하는 값을 구하라.위에는 어느정도 요약을 한 것이고 문제에서 주어진 Example 1을 가지고 조금 더 자세히 설명해보겠다.Input: days = 1
셰프는 각 음식 별 만족도 배열을 가지고 있다. 시간 1마다 하나의 음식을 만들수 있다고 했을 때, 총 만족도는 시간i \* 만족도i의 총 합이다. 총 만족도를 구할 때는 음식의 순서가 변할 수 있고 원한다면 음식을 뺄 수도 있다. 가장 큰 총 만족도를 구하시오.사실
햄버거 재료 리스트가 주어지는데, 빵-야채-고기-빵으로 들어오는 순서의 갯수를 정하라.일단 스택을 사용해야 겠다고 생각했다. 문제에서 나와있듯이 숫자를 쌓아서 순서를 확인하는 거니까. 스택의 길이가 4 이상이면 햄버거 재료를 POP해서 순서에 맞는지 보고 만지 않으면
과일 장수가 한 상자를 m개씩 포장하고 있다고 한다. 한 상자 마다 점수가 부여되는데, 점수 산정 방식은 해당 상자의 사과 중 제일 작은 점수 사과의 갯수 m 상자의 갯수이다. 과일 장수가 만들 수 있는 최대값을 구하시오.문제를 보자마자 정렬을 해서 풀어야겠다고 생
1부터 N까지의 사람들이 원으로 앉아있다고 하자. K번째 사람들을 제거하는 방법을 이용해서 모든 사람을 제거한다. 이때 제거된 사람들의 순서를 구하시오.처음에는 나누기로 푸는 줄 알았다. K번째 사람이니까. 근데, 사람들은 원으로 앉아있고 한 사람이 제거 될 때마다 사
크기가 N인 수열 A가 있다고 하자. 여기서 F(Ai)는 배열 A의 i번째 수가 얼마나 많이 나오는지를 의미한다.오등큰수는 현재 숫자의 오른쪽에 있는 수 중 제일 왼편에 있는 F()가 현재 숫자의 F()보다 큰 수이다. 각 숫자의 오등큰수를 구하고 만일 오등큰수가 없
문제 설명 명예의 전당에 올라갈 수 있는 사람들의 수 k와 점수 socre 배열이 주어진다. 초반 k번째까지는 모든 사람이 명예의 전당에 올라가지만 그 후부터는 현재 점수가 명예의 제일 작은 점수보다 크면 제일 작은 점수를 빼고 그 사람이 올라가고 아니면 점수가 유지되
K연구소는 K칸 앞으로 점프하거나 (현재까지 온 거리)\*2 만큼 순간이동하는 아이언 슈트를 만들었다고 한다. 이 아이언슈트는 K칸 점프하면 K칸 건전지가 닳는다. 순간이동에서는 닳지 않는다. 0부터 N까지 가려고 할 때 가능한 최소한의 건전지 사용량을 구하라문제를 보
10일 간 정현이가 원하는 할인 제품과 수량이 마트에서 진행하는 할인 이벤트와 같은지 확인하는 문제다.일단 처음에는 마트 할인에서 10일을 잡아서 확인해준 다음에 한 칸씩 뒤로 옮기면 될 거라고 생각했다. 효율성 문제가 걸리긴 했지만 일단 해보자는 마음으로 코드를 작성
주어진 리스트가 있을 때 해당 숫자가 동일하게 들어가도록 두 개를 나누는 문제다. 케이크가 어쩌고 저쩌고 했지만, 핵심은 바로 저거다딕셔너리를 사용해서 일단 토핑의 수를 다 센 다음에 하나씩 값을 옮겨가며 빼주면 되겠다고 생각했다.먼저 topping에 있는 숫자들의 수
해당 숫자보다 뒤에 있는 수 중 크면서 제일 가까운 수를 정답 배열에 넣어 반환하는 문제이다.너무나 간단하게 2차원 반복문을 생각했다. 하나 잡아서 뒤에 거 계속 돌리면 되지 않겠는가? 찾으면 break해주고. 시간 초과가 걸릴 걸 알면서도 그냥 해봤다...당연히 시간
Demi가 n시간 동안 야근 피로도를 최소화한 값을 반환하는 문제이다.여기서 야근 피로도는 남은 작업시간의 제곱을 전부 더한 값이다.https://school.programmers.co.kr/learn/courses/30/lessons/12927?languag
카카오에서는 이모티콘 할인 행사를 하는데, 할인 행사의 목표는 총 두 가지가 있다. 첫째 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것, 둘째 이모티콘 판매액을 최대한 늘리는 것. 이때 무조건 첫 번째 목표를 우선시한다.할인율은 10%, 20%, 30%, 40%가
문제가 너무 복잡하다...아무튼 대략 설명을 해보자면 일렬로 나열된 n개의 집이 있다고 가정한다. 이때 각 집에는 배달되어야 할 상자와 수거되어야 할 상자의 수가 존재한다. 택배 트럭이 cap만큼의 상자를 옮길 수 있을 때 모든 집들의 택배를 배달하고 수거할 최단 거리
(x, y)에서 출발해서 (r, c)로 이동할 때 미로에서 탈출한 경로를 반환하는 문제다. 이렇게 보면 단순한 탐색 문제인 듯 싶지만, 여기에는 세 가지 조건이 있다.첫째. 격자 바깥으로는 나갈 수 없다. 이건 다른 탐색 문제에서도 거의 기본으로 나오는 조건이라 넘어가
처음에 떠오른 생각은 그냥 다 계산해주는 거다. 너비 우선 탐색으로 일일히 구하고 양수인 것만 세주면 그게 답이잖아?하지만, 여기서 간과하면 안 될 조건이 있으니 바로 해당 문제는 정확성과 효율성 테스트가 각각 있는 문제라는 거다. 효율성 테스트! 때문에 이렇게 풀면
양 꼭짓점에서 이동하는 두 개의 대각선에 존재하는 숫자들을 전부 더하는 문제다. 난이도 Easy 답게 그냥 반복문으로도 풀어도 된다.처음에는 총 두 개의 반복문을 써서 푸는 걸 생각했다. 하나는 왼쪽 위 꼭짓점에서 오른쪽 아래 꼭짓점으로 내려오는 반복문이고 또 다른 하
무지가 회전판을 이용해서 먹방을 한다. 한참 먹방을 하던 도중 갑자기 네트워크 장애가 발생했다고 하자. 그렇다면 무지는 네트워크가 다시 정상화 될 때 몇 번째의 음식부터 먹어야 할까? 참고로 말하자면 효율성 테스트가 존재하는 문제다.처음에는 그냥 큐에 넣고 돌려서 계산
어피치가 문자열을 압축하려고 한다. 이때 압축하여 표현한 최소의 문자열을 구하여라.문자열 압축은 특정한 숫자 단위로 맨 앞에서부터 행한다.예를 들어서 문자열 aabbaccc가 있다고 하자. 이때 1개로 문자열을 압축한다고 하면 2a2ba3c가 될 것이다. 즉, 압축하려
배열을 45도로 돌리는 문제다. 문제가 상당히 길기에 백준 링크로 가서 차근차근 읽어보는 것을 추천한다.https://www.acmicpc.net/problem/17276일단 푸는 방법은 문제에 설명한 것들을 그대로 구현하면 된다. 다만, 배열의 인덱스를 벗어
https://jiwonna52.tistory.com/11설명은 위에 내가 더 자세히 써 둔 티스토리를 참고하면 좋을 거 같다.
문제에 대한 자세한 설명은 제 티스토리에 있습니다.https://jiwonna52.tistory.com/14
https://jiwonna52.tistory.com/18
https://jiwonna52.tistory.com/19
https://jiwonna52.tistory.com/20
https://jiwonna52.tistory.com/21