전체 글 296

[JAVA] 백준 주사위 윷놀이

단순 구현문제인줄 알았는데, 연결리스트를 통한 구현이어서 어려웠다. 노드는 아래 그림과 같이 순서대로 연결한다. 1. 직선방향으로 시작~도착까지 Node.next(연결된 객체1)로 연결 2. 지름길 같은경우는 addNext를 통해 10,20,30에 해당하는 노드를 찾아서 Node.fastPath(연결되 객체2)에 연결해준다. 3. permutation을 통해서 order[] 배열에 순열 경우의수를 dfs로 탐색한다. 4. dfs로 깊이 10까지 채웠으면, 해당 order[]배열을 통해 order[i]번째에 해당하는 Node[] horse에 넣어주는 gamestart를 시행한다. 5. 한가지 order경우의 수에 대해 gamestart를 완료했으면, Max값과 방문한 노드값들의 합(gamestart메소드 ..

[JAVA] 백준 인구이동

2 20 50 50 30 20 40 헛점으로 기록된 부분은 오른쪽/아래로 탐색하는데 유턴해서 돌아오는경우(아래 예시) (0,1) (0,2) ↓ ↑ (1,1)→ (1,2) right값이나 down값으로 dfs를 엮을수 없다. 따라서 현재 좌표 위치에서 1. 왼쪽좌표의 right값이 true인지 2. 위의좌표의 down값이 true인지 를 통해서 추가로 확인해줌으로써 국경들을 모두 이을 수 있었다. 전체코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringT..

[JAVA] 백준 상어초등학교

구현문제이다. 생각보다 구현에있어서 많은 시간이 든 문제이다. 실버 1문제인데 체감은 골드5정도 되는 느낌이다. 구현 방식대로 one,two,three는 비어있는 칸 중에서 좋아하는 학생이 인접한 칸에 가장 많은 칸으로 자리를 정한다. 1을 만족하는 칸이 여러 개이면, 인접한 칸 중에서 비어있는 칸이 가장 많은 칸으로 자리를 정한다. 2를 만족하는 칸도 여러 개인 경우에는 행의 번호가 가장 작은 칸으로, 그러한 칸도 여러 개이면 열의 번호가 가장 작은 칸으로 자리를 정한다. 위 사항을 그대로 구현한 것이다. 단, 구현하면서 인접한 칸에 좋아하는사람이 있는지 확인할때는 contains메소드를 통해서 Set(좋아하는 사람 모음)에 해당 num(좋아하는사람)이 있는지 존재여부만 확인한다. contains를 생..

[JAVA] 백준 나무재테크

첫시도-시간초과(테스트케이스는 다 맞음) 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; class Main { static class Tree { int age; boolean life = true; Tree() { this.age = 1; } Tree(int age) { this.age = age; } } static..

(SQL 프로그래머스) 고양이와 개는 몇마리 있을까/헤비유저가 소유한 장소

- 고양이와 개는 몇마리 있을까(https://programmers.co.kr/learn/courses/30/lessons/59040) 코드는 아래와 같다. -- 코드를 입력하세요 SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE SELECT문에서 각각의 ANIMAL_TYPE 에 대해서 대응해서 count값이 매칭된다. GROUP BY를 사용해서 ANIMAl_TYPE끼리 묶어서 출력하는게 핵심이다. 동물의 이름 순서대로 출력하기 위해서는 ORDER BY를 사용한다. -헤비 유저가 소유한 장소(https://programmers.co.kr/learn/courses/30..

(프로그래머스) 다단계 칫솔

위처럼 자식노드에서 수익이 발생시, 부모노드에게 자기의 이익을 나눠주는 방식이다. 따라서 처음에는 graph방식으로 구현을 하려다가, 각각의 노드의 이름이 String형식으로 제시되었으니 Map을 이용해서 Key(이름)에 따른 Value(수익)으로 구현하였다. 단, 각각의 노드에 대하여 부모-자식 관계일 필요 없이 부모가 있으면 재귀를 호출하게 되는 방식이면 충분했다. 따라서, enroll_refer 이라는 HashMap을 구현하여 자식노드에 대하여 부모를 참조할 수 있게 했다. import java.util.HashMap; class Solution { static HashMap hm = new HashMap(); static HashMap enroll_refer = new HashMap(); publ..

(프로그래머스) 행렬 테두리 회전하기

이전에 백준에서 풀었던 미세먼지안녕!문제와 비슷한 원리이다. 2021.05.24 - [분류 전체보기] - [JAVA] 백준 미세먼지 안녕! [JAVA] 백준 미세먼지 안녕! 구현에 관한 문제이다. 완전탐색 방식으로 구현하였다. 아래 예시는 확산+클리너를 1회 작동하였을때 예시이다. import java.util.*; import java.io.*; class Main { static int Row, Col, T; static int[][].. skmouse.tistory.com 필자는 주로 회전을 시킬때 Queue에 담아서 FIFO방식을 이용하여 회전한다. swap보다는 위 방식이 편하다고 생각한다. 하지만 swap방식도 연습해야 할 필요성을 느낀다. import java.io.*; import java..

(프로그래머스) 로또의 최고순위와 최저 순위

https://programmers.co.kr/learn/courses/30/lessons/77484 해시로 푸는 문제이다. 탐색알고리즘중에서 해시 알고리즘이 빠르다. 해시함수를 이용해서 탐색하면 시간이 알고리즘 수행시간이 입력 데이터 수와 관계없이 일정하다. 다른 탐색을 하기위해 정렬 비용과 탐색비용을 합치면 효율성이 떨어진다. 따라서 해시를 이용한 탐색을 하는 습관을 들여야한다. 필자의 답 import java.util.*; class Solution { static int[] answer = new int[2]; public int[] solution(int[] lottos, int[] win_nums) { HashMap hm = new HashMap(); int zeroCount=0; for(in..

하드코딩하면 안되는이유

https://www.youtube.com/watch?v=VzsXPR25pYw 백엔드 개발자는 아래 두 종류로 나뉜다. 알고리즘+최적화 JSON+I/O(DB설계도 같이 관여) => DB설계를 어떻게 해야되는지..비판적인 시각으로 바라봐보기 자기 PR 못하는사람은 업무일지를 작성해보기. => 어떤 요구, 회의가 오갔는지, 시스템의 주요 개념단위가 어떻게 정리되었는지 등등 내가 백엔드 개발자면, 개념을 정립해서 설계를 주도권을 쥐고 전파해주면 좋다. => FE개발자와 협업할때의 상황을 보자. 기획자에게 계획을 받았으면 설계도부터 그려서 기획자가 의도한 바가 맞는지 요구사항을 확립한다. 그리고 프론트개발자에게 api등을 정리해서 전달해준다. 하드코딩 X, 기획서작성하고 테스트케이스 작성해서 만들어내야함. SI..

[JAVA] 백준 원판 돌리기

탐색+구현 문제이다. 탐색 방식은 BFS방식으로 Queue에 넣어서 방향을 검사하는 것이다. 좌표값을 Queue에 넣는 방식을 새로 소개하겠다. Queue q = new LinkedList(); q.add(new int[]{i, j, map[i][j]}); 위의 코드처럼 Queue의 자료형에 배열을 넣어주면 임의의 배열을 통째로 넣을 수 있다. 따라서 위에서는 int[] = (x, y, 비교할 해당값) 을 큐에 넣어준 것이다. 그럼 위와 같은것을 언제 사용하는가? => 이중for문을 통해서 map을 한번 다 탐색하고 나서 다시 또 그 값을 찾아가야할때. 문제의 remove를 할때 탐색을 해서 bfs나 dfs를 통해 이웃하는 숫자의 값을 지워야한다. 백트래킹 방식으로 끝부분부터 지워야 탐색을하는데 지장이 ..