HackerRank Java 2D Array

문제 링크 :  https://www.hackerrank.com/challenges/java-2d-array/problem 간략한 설명 => 6 * 6 이차원 배열에서 HourGlass 모양의 합 중 가장 큰 합을 출력해내면 된다. ex) 1 1 1 0 0 0       0 1 0 0 0 0       1 1 1 0 0 0       0 0 0 1 2 3       0 0 0 1 3 1       0 0 0 2 2 2 1 + 2 + 3 + 3 + 2 + 2 + 2 = 15 출력 15 가장 큰 HourGlass 는 1 2 3                                         3                                      2 2 2 접근 방법 : 모래시계는 무조건 3 * 3 이차원 배열속에 있다.                     따라서 모든 3*3 이차원 배열의 부분을 뽑아내서 합을 구한 후                    최대값을 출력 해준다. import java.io.*; import java.math.*; import java.security.*; import java.text...

Django rest framework + MariaDB 맛보기 Feat.pycharm, swagger

이미지
2016년이였나??,, Django를 처음 접했던게? 대학교 3학년 때이다. 지금도 모르는게 많지만, 그때와 지금 비교해보면 그때는 지금보다 더 모르는게 많았었다. 만들고 싶은 웹서비스가 있어서, 프레임워크가 어떤것인지에 대한 개념도 모른 체로 무작정 사용 했었던 기억이 난다. 지금와서 다시 찾아보고, 공부하니까.. 예전에 고민했었던 사안이 생각난다. 과거에 선배 개발자들에게 선생님들에게 종종 물었었다. "언어도 너무 많고, 라이브러리 프레임워크가 너무 많다. 공부할 게 너무 많다 어떻게 해야될지 모르겠다"라고 고민을 얘기하면 돌아오는 대답은 항상 비슷했다. '하나를 깊게 알면, 언어가 달라도 금방 알 수 있다'라는 답변. 이 답변을 새삼 살결로 느끼게되었다. 물론 하나를 깊게 안다 라는 말은 과거의 나에비해 헤헤헤 상대성 이론은 완벽하다. 서두가 주저리주저리 너무 길었는데, 본론으로!!고우~ 먼저, 프로젝트 생성. 경로는 알아서 해주고, 앱이름도 알아서 해준다. 보는 바와 같이 파이썬 버전은 3.7 Django 버전은 2.1.7 필수 패키지는 djangorestframework 3.9.2 django-rest-swagger 2.2.0 mysqlclient 1.4.2.post1 mysqlclient는 MariaDB가 설치 되어있지 않으면, 패키지 설치가 안되기 때문에 MariaDB설치 -> mysqlclient 패키지 설치해야된다. 본인은 맥에서 개발중인데, brew는 이미 설치 되었다는 가정하고 brew update brew install mariadb 하고나면, 블라블라~ 설치 어쩌구 로그들 완료되고 서버를 키는데, 아래처럼 /usr/local/etc/my.cnf.d 가 없단다. 그래서 직접 만들어주고 다시 실행. namdong-gil-ui-MacBookPro:man namdong-gil$ mysql.server star...

2019 카카오 신입 공채 1차 - 실패율

문제풀기. :  https://www.welcomekakao.com/learn/courses/30/lessons/42889 2번 문제 실패율 각 스테이지 마다 실패율을 계산하고 실패율이 높은 스테이지 순 ( 내림차순) 정렬 실패율이 같으면 스테이지 오름차순 정렬 import java.util.*; class Solution {     static class StageFailInfo implements Comparable<StageFailInfo> {         double rate;         int stage;         public StageFailInfo(int stage, double rate) {             this.stage = stage;             this.rate = rate;         }         @Override         public int compareTo(StageFailInfo o) {             if (this.rate > o.rate) {                 return -1;             } else if (this.rate < o.rate) {                 return 1;   ...

2019 카카오 신입 공채 1차 - 오픈채팅방

문제 풀기 :  https://www.welcomekakao.com/learn/courses/30/lessons/42888 이 문제의 핵심은 uid이다. 하나의 uid에 하나의 닉네임이 매핑된다. 결국 마지막에 변경된 닉네임이 uid이 매핑된다. Change의 경우를 제외하고 Enter와 Leave의 경우만 한국 문자열로 대치하면서, uid에 매핑된 닉네임을 대입시키면 된다. import java.util.*; class Solution {     public String[] solution(String[] record) {         Map<String, String> users = new HashMap<>();         ArrayList<String> answer = new ArrayList<>();         int length = 0;         for (int i = 0; i < record.length; i++) {             String[] temp = record[i].split(" ");             if (temp.length > 2)                 users.put(temp[1], temp[2]);             if(!temp[0].equals("Change"))                 length++;   ...

백준 알고리즘 - 구슬탈출2

이 문제의 핵심은 어떤 구슬을 먼저 움직여 줄 지인 것 같다. 처음에 놓여진 빨간 구슬과 파란 구슬의 좌표값을 이용해서 우선순위 정해주기 #. . . RB.# 의 경우 왼쪽으로 굴리면 R부터 움직이고 B는 다음에 움직이고, 오른쪽으로 굴리면 B부터 굴리고 R을 다음에 굴린다. 구슬 이동 로직은 재귀를 이용해서 #을 만나거나 O 구멍을 만날 때 까지 계속 호출했다. 이 문제도 결국 최대 10번이다. 4의 10제곱의 경우의 수만 고려하면 된다. 1024 * 1024 는 100만이 조금 넘는다. 100만가지의 경우의 수를 검색해서 구슬이 탈출가능한 지 가능 하다면 최소 몇번만에 빠져가는지 구하면 된다. 하지만 100만가지를 다 검사하니 시간초과가 났다. 그래서 의미없는 움직임을 제외 시켜주니 통과됬다. 1. 같은 방향으로 연속해서 움직이는 경우 2. 왔던 방향으로 움직이는 경우 2가지만 제외해줘도 검사하는 경우의 수가 현저히 줄어든다. import java.util.HashSet; import java.util.Iterator; import java.util.Scanner; public class Main {     static class InObject {         int y;         int x;         int originY;         int originX;         String type;     }     private static HashSet<Integer> results = new HashSet<>();     public static void main(String[] args) {   ...

백준 알고리즘 - 2048 (Easy)

이 문제를 풀면서, 고생했던 점은 하나다. 위, 아래, 왼쪽, 오른쪽 각각 방향으로 블럭을 옮길 때의 로직 구현이었다. 처음에 구현 할 때 떨어져 있는 블럭의 케이스를 고려하지 않고 짜서, 뒤엎었다. ex) 2 0 0 2 4 의 경우 왼쪽으로 밀면 4 4 0 0 0 이 되어야 한다. 하지만 이 케이스를 고려하지 않아서 2 2 4 0 0 이 되었다. 그리고 두 번째 문제가 한 번 더했던 블럭은 두 번 이상 더하면 안되는데 더하는 케이스였다. ex) 2 2 0 4 0 의 경우 왼쪽으로 밀면 4 4 0 0 0 이 되어야 한다. 하지만 이 케이스를 고려하지 않아서 8 0 0 0 0 이 되었다. 이문제는 완전탐색이다. 최대 4이 5제곱 만큼 경우의 수를 돌리고 가장 큰 블록을 출력해주면 된다. import java.util.Scanner; public class Main {     static class Block{         int y;         int x;         int value;         int originValue;         boolean isSum;         public Block(int y, int x,int value) {             this.y = y;             this.x = x;             this.value = value;             this.originValue = value; ...

백준 알고리즘 - 퇴사

진짜 퇴사를 앞두고 퇴사 문제를 풀면서 느낌이 조금 달랐다. ㅋㅋㅋㅋ 이 문제도 DFS로 풀 수 있지만,  다른 사람이 푼 코드를 참고했다. 재귀로 풀었는데 DFS보다 연산의 횟수를 조금이나마 줄일 수 있었다. 하지만 이 문제를 DP로 푸는 사람도 보았는데, 아직까지 DP의 개념은 이해하지만 스스로 문제해결에 구현 하기에는 공부를 더 해야겠다고 생각했다. import java.util.Scanner; public class Main {     private static int result = 0;     public static void main(String[] args) {         Scanner scn = new Scanner(System.in);         int N = scn.nextInt();         int[] takenTime = new int[N];         int[] benefits = new int[N];         boolean[] isWork = new boolean[N];         boolean[] visited = new boolean[N];         for (int i = 0; i < N; i++) {             takenTime[i] = scn.nextInt();             benefits[i] = scn.nextInt();         }         scn.clos...