본문 바로가기

분류 전체보기

(72)
[백준] 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
[백준] 1874번: 스택 수열 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net input으로 들어온 수열을 저장하는 큐(q), 그리고 스택(st)을 선언해서 사용했다. 숫자가 1~n까지 오름차순으로 증가하므로, for문으로 i=1~n까지 차례로 대입해준다. for문이 돌 때마다 q.front()와 st.top()을 검사하는데, 여기서 q.front()는 현재 만들어야 하는 수열의 수를 담고 있..
[알고리즘] 그래프 DFS, BFS를 공부하기 전 먼저 그래프에 대해 간략하게 정리하고자 한다. 그래프란, 위 그림과 같이 정점(vertex)과 간선(edge)로 이루어진 자료구조이다. 간선은 정점의 ordered pair로 표현한다. 예를들어 (u,v)는 u에서 v로 향하는 간선을 뜻한다. 그래프는 무방향 그래프(undirected graph)와 방향 그래프(directed graph)로 나뉘어진다. 방향 그래프에서 간선은 방향성을 가지고 있으며, 화살표 모양으로 표현된다. directed graph에서는 self-loop(자기 자신에서 자기 자신을 가리키는 간선)도 가능하다. 1. Adjacency 간선 (u,v)가 있을 때, 정점 v를 정점 u의 adjacency라고 한다. undirected graph에서는 인접 관..