전체 글

문제를 너무 오래 붙잡고 있어서 열받았다. 연습문제 톡에 그냥 정답코드 올려버리려다가 참는다... 그래도 다른 사람을 배려해서 힌트를 3 단계로 나눠서 주겠다. 1번 힌트 더보기 DP를 사용한다. 2번 힌트 더보기 그래 DP인건 이미 알았겠지. 하하.. DP가 3차원 배열이다. 3번 힌트 더보기 3차원인 것도 알았는데 위치말고 뭘 넣어야할지 몰랐을 수도 있겠지. 하하.. DP[r][c][스프링쿨러 설치 여부] 코드도 첨부한다. N = int(input()) tree = [[0] * (N+1) for _ in range(N+1)] for i in range(1, N+1): tree[i][1:] = list(map(int, input().split())) did = [[0] * (N+1) for _ in r..

[Spring Boot] 스프링 부트 - 기본편 자바의 객체지향 특성을 잘 활용하기 위해 스프링 프레임워크를 사용하는 것 좋은 객체 지향 프로그래밍이란, 유연하고 변경에 용이하게 만드는 것 SOLID 원칙 중 DIP와 OCP를 다형성만으로는 지키기 어렵기 때문에 스프링의 DI 컨테이너의 도움을 받는다. 다형성이란 클라이언트가 역할(인터페이스)에만 의존하고, 구현체에는 의존하지 않는 것 [SQL] 해커랭크 - BST 만들기 Binary Tree의 정보로 노드의 값과 부모 노드가 주어질 때, 각 노드가 Root, Leaf, Inner 노드인지 노드 값과 타입을 함께 출력해야한다. 서브쿼리에 노드의 자식 정보를 저장하기 위해 LEFT JOIN을 사용했다. 지원서 작성 (지원동기란...)

[SQL] HackerRank SQL - Occupations 테이블의 열이 주어지고, 행을 순차적으로 채우는 문제 Doctor, Professor, Singer, Actor 순으로 열의 head가 주어진다. 각 직업군 별 사람의 이름을 알파벳 순으로 정렬해서 행을 채우고, 더 이상 사람이 없다면 NULL 을 작성 너무 어려워서 다른 사람의 풀이를 본 결과 서브쿼리를 활용한다. ROW_NUMBER()를 활용해 각 직업군별 행의 순서 저장 그러면 직업별 등장 순서를 그룹화 하여 행을 채울 수 있고, 직업별 값을 넣기 위해 MAX(CASE WHEN 직업 = 'Doctor' THEN NAME END)를 활용한다. [알고리즘] 백준 5557 1학년 복습 DP 테이블부터 제대로 설계하고 풀어야 한다. 숫자를 +,..

[알고리즘] 1. 백준 - 2591 숫자카드 TopDown, BottomUp 모두 가능 10, 20, 30과 같은 카드에서 나오는 0을 고려하지 않으면 틀린다. 그나마 쉬움 2. 백준 - 15486 퇴사2 BottomUp이 Python은 되는데 Java로는 안됨 역순으로 마지막 날부터 앞으로 가면서 상담을 한 경우와 그렇지 않은 경우를 비교 그나마 쉬움 3. 백준 - 5557 1학년 해설 봄 (복습 필요) 핵심 : 가장 처음 카드는 이미 사용했다 치고 그 다음 숫자를 더하거나 뺀다. 마지막에 도착하고 목표 숫자가 맞다면 경우의 수 + 1 이미 값이 나왔거나 조건에 맞지 않으면 반환한다. 더하거나 빼는 경우를 다 포함하기 위해 DP함수를 각각 호출해야한다. 약간 어려움 4. 백준 - 2758 로또 Bott..

[알고리즘] 1. CodeTree - 코드트리 빵 벌써 3번째 푸는 문제. 귀찮다. 가장 애먹이는 부분은 1번 행위일 것이다. 사람의 위치에서 4방향 중 맨해튼 거리 계산식이 아닌 BFS로 직접 계산한 최단 거리로 가는 방향으로 '한 칸' 가야한다. 사람 -> 편의점 방향으로 생각하면 아마 (행, 열, 시작 방향)을 담아가며 진행해야 할 것이다. 그러나 편의점 -> 사람 방향으로 생각하면 아주 쉬워진다. 참고로 갈 수 없는 곳을 BFS에서 처리해서 받아온 2차원 배열에서, 거리(또는 시간)을 비교할 때 0을 넘어야한다는 조건을 빠트렸다가 틀렸다. 2. 백준 - 20061 모노미노도미노2 구현 문제만 풀고 있지만 얜 정말 빡구현이다. 중력도 아닌 애매한 특수 구역 이동.. 파란 블록이 처리하기 어렵다. 처..

[알고리즘] 1. CodeTree - 싸움땅 벌써 3번째 푸는 문제. 귀찮다. 이 문제에서 가장 헷갈리는 부분은 플레이어의 위치를 조정하는 것이다. 왜냐면 한 자리에는 한 사람만 있는게 맞는데, 싸움 전에는 덮어버리면 안된다. 위치를 어느 시점에서 수정하느냐에 따라 이후의 이동 및 해당 위치에 사람이 존재하는지 검색하는데 영향을 준다. 해당 위치에 다른 사람이 있는지 확인할 때, 효율성을 위해 2차원 배열에 기록해야하나 했지만 플레이어가 30명이므로 그냥 전체 탐색을 했다. 따라서 다른 사람이 있는지 확인한 후에 해당 위치로 이동한다. 2. CodeTree - 격자 숫자 놀이 난이도는 낮은데 새로 푸는 문제라서 그런지 오래걸림 행, 열의 길이를 비교해야하며, 특히 열 기준으로 세어야 할 경우가 헷갈렸다...

추석이라 4일 알차게 놀았다.. 자소서 좀 미리미리 쓰자 제발~~ [알고리즘] 1. 백준 - 드래곤 커브 curve 라는 배열에 좌표(tuple)를 추가한다. 점끼리의 선은 만들지 않지만, 순서가 유지되기 때문에 선이 없어도 된다. 끝 점을 기준으로 회전이라는 점이 어려웠다. 기존에 시계방향으로의 회전은 정해진 범위 안에서 이루어지는 식으로 풀어왔는데, 이 문제는 2차원 배열에 표기하지도 않았고, 전체 크기인 100에서 빼는 것도 아니고, 그렇다고 현재 커브의 최대 길이에서 빼도 원하는 결과가 나오지 않았다. 결국 끝점을 (0, 0)으로 조정하고, 다른 점들도 조정하면서 시계방향 90' 회전을 r, c = c, -r 로 했다. (원래는 r, c = c, N -r - 1 로 함) 세대를 완성한 커브는 전체..


09/26 [알고리즘] 1. CodeTree - 바이러스 백신 조합 + 덱 활용 백신을 받는 병원을 M개 고르기 위해 조합을 사용했고, BFS를 위해 deque을 사용했다. 09/27 [알고리즘] 2. CodeTree - 정육면체 한번 더 굴리기 주사위를 회전 시킬 때, 나는 6개의 면을 3*4 배열에서 어떻게 움직일지 고민했다. 해설을 보니 앞, 위, 오른쪽 만 저장해놓고 합이 7이라는 규칙을 활용해 뒤, 아래, 왼쪽을 구했다. 훨씬 나은듯 3. CodeTree - 토끼와 경주 격자 밖일 경우 반대로 빠르게 이동하기 빠르게 이동하기 위해서는 % 연산이 필수이다. 격자 밖을 넘어갔을 경우, 넘어간 만큼 다시 반대 방향으로 돌려야한다. 2*(N-1) - nr nr이 음수여도 상관없는 이유는 파이썬으로 모듈..