본문 바로가기

Algorithm/프로그래머스

(36)
[2020카카오공채] 외벽 점검 https://programmers.co.kr/learn/courses/30/lessons/60062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 으왕.. 다른분들 풀이 참고해가면서 어렵게 푼 문제 순열을 이용해서 푸는 거라고는 생각했지만 순열을 어떻게 구현해야 할지, weak 배열을 어떻게 탐색해야 할지 쉬이 감이 오지 않았다. 순열은 algorithm 헤더에 있는 next_permutation을 이용하면 쉽게 구현할 수 있다. next_permutation에 인자로 배열의 포인터를 넘겨주면 알아서 배열을 다음 순열로 만들어준다. 뿐만 아니라 리턴값으..
[2019 카카오 개발자 겨울 인턴십] 튜플 https://programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 주어진 문자열을 파싱하면서 각각의 숫자가 몇번 나오는지만 카운트하면 쉽게 풀린다. 자주 등장하는 숫자일수록 튜플의 앞쪽에 있는 숫자이기 때문이다. 따라서 각각의 숫자가 몇번 나오는지 카운트 한 뒤, 빈도수를 내림차순으로 정렬하면 구하고자 하는 답이 나온다. (번거롭게 괄호, 쉼표까지 파싱할 필요가 없다) 빈도수를 저장하기 위해 unordered_map을 사용하였고 최종적으로 map의 원소들을 탐색하..
[2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; int col = board[0].size(); vector bd(board.size()); stack bucket; for (int i = board.size() - 1; i >= 0; i--) { for (int j ..
[2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 https://programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 단순히 반복문 돌려가면서 징검다리 숫자를 1씩 빼 주는 방식으로 푸는 문제가 아니라는 것은 너무나도 당연해 보인다. 이 문제는 결국 각 징검다리 숫자에서 n씩 뺐을 때, 0보다 작거나 같은 돌이 최소 연속 k개 있게끔 만드는 n의 최솟값을 구하는 문제이다. => 이걸 더 단순화 시키면, 징검다리의 연속된 돌을 k개 묶어서 돌에 적힌 숫자의 max를 구한 뒤, max 중 가장 작은 값을 구하는 문제와 같다. 예..
[2019 카카오 개발자 겨울 인턴십] 호텔 방 배정 https://programmers.co.kr/learn/courses/30/lessons/64063 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr room_number의 크기가 최대 200,000이므로 단순 반복문으로는 풀 수 없는 문제이다. 이 문제는 유니온파인드를 이용하면 매우 간단히 풀 수 있다. 다만 방의 개수가 무려 10^12개이므로 모든 방에 대해 배열을 선언하는 것은 불가능하다. 따라서 unordered_map을 이용하여 방이 배정되어 merge가 일어나는 경우에만 urordered_map에 데이터를 집어넣었다. #include #inclu..
[2019 카카오 개발자 겨울 인턴십] 불량 사용자 https://programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디와 일부 문자가 *로 표기된 불량 아이디 목록이 주어졌을 때 불량 아이디 목록과 일치하는 아이디 셋의 종류가 몇 개인지를 출력하는 문제이다. 인풋사이즈가 정말 작기 때문에 그냥 2중 for문을 돌리면서 글자를 하나하나씩 검사해도 잘 풀린다. => 여기서 검사결과를 저장하기 위해 2차원 배열인 mapping_id 를 선언하였다. (banned_id 별로 가능한 id의 index를 저장) 따라서 이 문제의 ..
[2020카카오공채] 가사 검색 https://programmers.co.kr/learn/courses/30/lessons/60060 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 단순 문자열끼리 비교하는 방식으로 코드를 짜면 효율성 테스트에서 탈락한다. 따라서 효율적인 알고리즘을 생각해내야 하는 문제인데.. 처음 내가 짰던 코드는 문자열을 소팅한 후 문자열을 길이별로 저장하는 2차원 배열을 만들어서 배열을 binary search 하는 방식이었다. 이렇게 짜니 효율성 테스트는 간신히 통과했으나 코드가 더럽고 binary search도 직접 구현해야 하는 어려움이 있었다. #includ..
[2020카카오공채] 기둥과 보 설치 https://programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 노트에 풀이를 정리한 후 풀었더니 훨씬 쉽고 빠르게 풀었다! 복잡한 문제일수록 꼭 먼저 정리한 후 구현하는 습관을 들이자 문제가 길기 때문에 모든 요구사항을 잘 정리한 후 풀어야 한다. 내가 푼 방법은 기둥과 보의 위치를 저장하는 2차원 배열 gi[101], bo[101]을 선언한 후 설치나 삭제를 할 때마다 배열의 내용을 검사해가며 풀었다. 현재 위치에 기둥과 보를 설치할 수 있는지 검사하는 check_gi..