본문 바로가기

Algorithm98

2020 Kakao internship 67257 - 수식 최대화(파싱, 완전탐색, 배열) c++ 풀이 - 연산자 혹은 괄호 문제만 나오면 스택으로 풀 생각만 했는데, 그렇게 안 풀어도 되는 문제였다. - 모든 연산자 우선순위 조합에 대해서 최대값을 구하는데 vector erase연산으로 계산된 피연산자를 벡터에서 제거해나가는 방식으로 풀었다. - 연산자랑 피연산자를 따로 분리했는데 strtok을 사용했다. strtok은 여러개의 delimiter에 대해서 분리가 되도록 짤 수 있어서 stringstream과 함께 자주 사용한다. 개인적으로 분리자 단위가 공백문자면 stringstream을 주로 사용하고 여러개이면 strtok을 자주 사용한다. #include #include #include #include using namespace std; vector order{'+', '-', '*'}; // 연산.. 2021. 9. 6.
2020 Kakao internship 67256 - 키패드 누르기(배열, 구현) c++ 풀이 -단순 구현이다. 각 버튼마다 좌표값을 구해서 배열에 저장한뒤 그 좌표값으로 손가락과의 거리를 계속 구하는 식으로 빠르게 구현했다. #include #include #include using namespace std; // 147 왼쪽 369오른쪽 2580 가까운 손가락 or hand string solution(vector numbers, string hand) { // numbers 1000 string answer = ""; vector fingerPos(2); // L, R 위치 vector board(13); // 번호별 좌표 fingerPos[0] = {3,0}, fingerPos[1] = {3,2}; // *, # board[0] = {3, 1}; for(int i = 1; i len2) {.. 2021. 9. 6.
2019 Kakao blind 42894 - 블록게임(배열, 구현) c++ 풀이 - 6번 매칭점수 문제보다 더 쉬운 문제 같다. 맵의 모든 범위를 블록 사이즈인 2*3, 3*2 범위로 탐색하면서 위에서 블록을 떨궜을 때 직사각형을 만들 수 있는지를 계속 체크해나가는 식으로 문제를 풀었다. 블록 모양이 정해져있어서 추가된 블록 갯수가 2개여야만 직사각형이 만들어지는 조건을 이용해서 쉽게 풀 수 있다. #include #include using namespace std; vector Board; bool canFill(int r, int c) { // 행 검사 for(int i = 0; i < r; ++i) { if(Board[i][c] != 0) return false; // 위에 모두 빈칸이여야 } return true; } bool find(int sr, int sc, int h,.. 2021. 9. 6.
2019 Kakao blind 42892 - 길 찾기 게임(이진 트리 순회) c++ 풀이 https://programmers.co.kr/learn/courses/30/lessons/42892 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr - 뭔가 교과서적인 문제였다. 그동안 백준에서 트리그래프 알고리즘 문제를 풀 때 부모노드 idx만 담는 int 배열로 트리를 구현하곤 했는데, 이렇게 자식정보를 담는 노드를 구현해야되는 문제를 오랜만에 풀어봐서 간만에 알고리즘 전공서를 펴서 트리 순회하는 파트를 복습하는 계기가 됬다. inorder, preorder, postorder 구현보다 트리를 구현하는게 .. 2021. 9. 6.