Algorithm

    [2018 KAKAO BLIND RECRUITMENT] 비밀지도

    💣 문제 이해 먼저 입력으로 받은 배열의 10진수를 2진수로 변환한다. 부족한 자리는 0으로 채운다. 이후, 2진수들로 채워진 배열을 하나 씩 선택하여 각 자리를 비교한다. 두 자리 중 하나라도 1이면 #, 두 자리 다 0이면 공백이 된다. 즉, OR연산을 수행하는 것이다. 그렇게 생성된 문자열 리스트를 반환한다. 💭 풀이 과정 arr1 = [9, 20, 28, 18, 11] arr2 = [30, 1, 21, 17, 28] 는 아래와 같이 변하게 된다. arr1 = ['01001', '10100', '11100', '10010', '01011'] arr2 = ['11110', '00001', '10101', '10001', '11100'] 첫 번째 인덱스에 위치한 arr1의 "01001"과 arr2의 "..

    [2020 카카오 인턴십 for Tech developers] 키패드 누르기

    💣 문제 이해 [1, 4, 7] 은 무조건 왼손으로 터치한다. [3, 6, 9] 는 무조건 오른손으로 터치한다. 가운데에 위치한 [2, 5, 8, 0] 은 더 가까운 곳에 있는 손가락이 터치한다. 번호를 키(Key) 값으로, 행, 열 번호 리스트를 값(Value)으로 하는 딕셔너리를 선언해두고, 현재 번호와 양 손가락의 거리 차이의 절댓값을 비교하여 더 값이 작은 손가락이 터치하는 것으로 한다. 💭 풀이 과정 작성 언어: Python3 def solution(numbers, hand): num_dict = { 1: [0, 0], 2: [0, 1], 3: [0, 2], 4: [1, 0], 5: [1, 1], 6: [1, 2], 7: [2, 0], 8: [2, 1], 9: [2, 2], 0: [3, 1] }..

    [BOJ] 백준 1935 후위 표기식2 / 스택(Stack)

    💣 문제 이해 후위 표기식과 각 피연산자에 대응하는 값들이 주어질 때, 그 식을 계산하는 문제이다. 스택(Stack)을 활용하여 풀이했다. 💭 풀이 과정 작성 언어: C++ #include #include using namespace std; int main() { string operation = ""; int numCnt = 0; int alphabet[30] = {0, }; stack oper_Stack; // 입력의 수와 후위 표기식 입력받기 cin >> numCnt >> operation; // 피연산자에 대응하는 값 입력받기 for (int i = 0; i > alphabet[i]; } for (int i = 0; i < operation.length()..

    [BOJ] 백준 1918 후위 표기식 / 스택(Stack)

    💣 문제 이해 후위 표기법(postfix)은 연산자가 피연산자 뒤에 위치하는 방법이다. 예를 들어 a+b*c를 후위 표기식으로 바꾸면 abc*+가 된다. 중위 표기식이 주어졌을 때 후위 표기식으로 고치는 프로그램을 작성한다. 스택(Stack)을 활용하여 풀이했다. 💭 풀이 과정 C++ Stack 라이브러리를 참조하여 중위 표기법을 구현하였다. 작성 언어: C++ #include #include using namespace std; int main() { string expression = ""; stack s1; cin >> expression; for (int i = 0; i = 60) { // 피연산자 출력(모든 ..

    [BOJ] 백준 10828 스택 / 스택(Stack)

    💣 문제 이해 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성한다. 명령은 push, pop, top, size, empty로 총 다섯 가지이다. 스택(Stack) 단순 구현 문제이다. 💭 풀이 과정 C++ template을 활용하여 Linked-List로 스택을 구현하였다. 작성 언어: C++ #include using namespace std; template class Node { public: T value; Node *next; Node(): next(nullptr){} Node(T tValue, Node *tNext): value(tValue), next(tNext){} }; template class Stack { public: int size; Nod..

    [2019 카카오 개발자 겨울 인턴십] 불량 사용자

    💣 문제 이해 이벤트 응모자 아이디 목록이 담긴 배열 user_id와 불량 사용자 아이디 목록이 담긴 배열 banned_id가 매개변수로 주어질 때, 당첨에서 제외되어야 할 제재 아이디 목록은 몇 가지 경우의 수가 가능한 지 return 하도록 solution 함수를 완성해야 한다. 💭 풀이 과정 먼저 banned_id 와 길이가 동일한 user_id 를 찾고, * 문자를 제외한 모든 문자가 동일하다면 같은 아이디라고 가정하고, 그 아이디의 인덱스를 저장한다. 각 banned_id 별로 가능한 user_id 후보가 한 개 이상이므로, 모든 조합의 수를 구하는 것이다. 동일한 조합의 중복이 가능하다면 곱하면 되지만, 중복을 허락하지 않으므로 체크해줘야 한다. 방법을 고민하다, 다른 풀이를 찾아보며 비트마스..

    [2019 카카오 개발자 겨울 인턴십] 튜플

    💣 문제 이해 특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해야 한다. 입출력 예 s result "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{20,111},{111}}" [111, 20] "{{123}}" [123] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] 💭 풀이 과정 문자열 파싱을 물어보는 문제였다. C++로 풀어보려하니 난이도에 비해 소스 길이가 짧은 편은 아니었다. 구글링하면서 파이썬으로 작성한 다른 소스코드들을 보니 그저 빛..🤘🏼..

    [2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임

    💣 문제 이해 인형을 집어 올릴 위치에서 0이 아닌 숫자가 나올 때까지 아래 방향으로 탐색한다. 바닥에 도착하기 전에 인형을 발견하면 해당 위치를 0으로 만들고 바구니에 담는다. 만약, 이전에 바구니에 넣은 인형과 같다면, answer를 2 증가하고, 바구니의 그 인형을 제거한다. 💭 풀이 과정 작성 언어: Python3 def solution(board, moves): answer = 0 stack = [] length = len(board[0]) for j in moves: for i in range(length): if board[i][j - 1] != 0: if len(stack) != 0 and stack[-1] == board[i][j - 1]: answer += 2 stack.pop() el..

    [BOJ] 백준 11055 가장 큰 증가 부분 수열 / 동적 계획법(Dynamic-Programming)

    💣 문제 이해 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다. 동적 계획법(Dynamic Programming) 방식을 사용했다. 💭 풀이 과정 앞의 문제 11053번 가장 긴 증가하는 부분 수열 과 거의 유사하다. 동적 계획법 풀이 작성 언어: C++ #include int biggestIncreasingSeq (int arr[][1010], int size) { int sumMax = 0, l_result = 0; for (int i = 0; i < size; ++i) { for (int j = 0; j < i; ++j) { if (arr[..

    [BOJ] 백준 11053 가장 긴 증가하는 부분 수열 / 동적 계획법(Dynamic-Programming)

    💣 문제 이해 수열 A = {10, 20, 10, 30, 20, 50}인 경우 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 동적 계획법(Dynamic Programming) 방식을 사용했다. 💭 풀이 과정 생각보다 풀이과정은 간단했다. 계속해서 DP 문제를 풀이하며 풀이 접근 방식 감을 잘 잡는 게 중요한 것 같다. 동적 계획법 풀이 작성 언어: C++ #include using namespace std; int longestSeqLength(int (*dpArr)[1010], int arrSize) { int max = 0, longest = 0; for (int i = 0; i < arrSize; ++i) { for (int j = 0; j..