본문 바로가기

Algorithm

(61)
[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..
[백준] 1182번: 부분수열의 합 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 전에 재귀로 풀었던 문제인데 가볍게 비트마스킹 연습할 겸 다시 풀어보았다. 근데 이 문제는 재귀로 푸는게 더 빠르네..ㅋㅋㅋㅋㅋㅋㅋㅋ #include using namespace std; int n, s; int arr[20]; int cnt = 0; void calc(int i, int sum) { if (i == n) { if (sum == s) cnt++;..
[알고리즘] 비트연산자, 비트마스킹 https://blog.naver.com/kks227/220787042377 비트마스킹(Bit Masking) 이번에 쓸 글은 꼭 알고리즘이라고 하기는 뭣한, 테크닉이나 도구라고 봐야 할 듯 싶습니다.비트마스크(Bi... blog.naver.com 카카오 모의 코딩테스트 탈탈 털린 후 정리하면서 쓰는 포스팅! 배움의 길은 멀고도 험하다.. 아무튼 전부터 공부해봐야지 맘먹고 있던 비트마스킹 아직 많은 알고리즘들을 공부해보지 않아서 비트마스킹의 쓰임새에 대해 다 알 순 없지만, 순열, 조합 등의 문제에 쓰면 좋을 것 같다(일단 내가 아는 범위 내에선) 1,0 값을 가지는 N사이즈 배열이 필요할 때, 배열 대신에 N비트의 정수를 사용해 각 비트에 값을 저장한다는게 컨셉이다. 평소에는 그냥 배열로 써도 크게 상..
[2020카카오공채] 기둥과 보 설치 https://programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 노트에 풀이를 정리한 후 풀었더니 훨씬 쉽고 빠르게 풀었다! 복잡한 문제일수록 꼭 먼저 정리한 후 구현하는 습관을 들이자 문제가 길기 때문에 모든 요구사항을 잘 정리한 후 풀어야 한다. 내가 푼 방법은 기둥과 보의 위치를 저장하는 2차원 배열 gi[101], bo[101]을 선언한 후 설치나 삭제를 할 때마다 배열의 내용을 검사해가며 풀었다. 현재 위치에 기둥과 보를 설치할 수 있는지 검사하는 check_gi..
[2020카카오공채] 자물쇠와 열쇠 https://programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 카카오 코딩테스트 문제를 처음부터 풀어보고 있다 이 문제는 3번 문제에 해당하는데, 정답률이 고작 7.4% ㅋㅋㅋㅋㅋ (물론 뒤쪽 문제로 갈수록 정답률이 점점 더 떨어진다) 카카오가 전면 블라인드 채용을 해서 일단 찔러보기 식으로 지원을 한 지원자도 많을 것 같기 때문에 정답률이 크게 유의미한건 아닌 것 같다. 아무튼 1~3번 문제를 풀어본 소감은 구현력이 많이 요구된다는 것! 솔직히 문제 자체는 손도 못댈 ..
[2020카카오공채] 괄호 변환 https://programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include using namespace std; string solution(string p) { string answer = ""; if (p == "") return answer; int i; int left = 0, right = 0; for (i = 0; i < p.length(); i++) { if (p[i] == '(') left++; else right++; ..
[2020카카오공채] 문자열 압축 https://programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include using namespace std; int digit(int n) { int d = 0; while (n) { n /= 10; d++; } return d; } int solution(string s) { int answer = s.length(); for (int i = 1; i