Lv 2. 방문길이
·
Algorithm & Data Structures/Programers
코드 흐름Move 클래스를 통해서 이동을 했을 때 시작점위치와 끝점위치를 저장하는 객체 선언Move는 객체이기에 equals 연산에서 hashcode만 달라도 인스턴스가 같다한들 다른 것으로 판단되기에 equals와 hashcode 를 overrideHashSet으로 중복제거 메커니즘을 사용입력으로 받은 dirs에서 charAt으로 하나씩 명령어 가져오기명령어에 맞게끔 x와 xx, y와 yy를 수정moves set에 밖으로 나간게 아니라면 시작점에서 끝점, 끝점에서 시작점으로 오는 Move를 둘다 저장return 시 왕복까지 모두 해놓았기에 HashSet의 크기/2 를 리턴 import java.util.*;class Move{ int startx,starty; int endx,endy; ..
Lv 2. 2개 이하로 다른 비트
·
Algorithm & Data Structures/Programers
코드 흐름for 문을 통해서 numbers 에서 하나씩 long 타입 숫자를 가져온다.그 숫자가 짝수이면 1 을 더한것이 값이되는 규칙이 있으므로 1을 더해서 answer 배열에 집어 넣는다.그 숫자가 홀수라면 처음 0이 나오는 구간에서 "10"으로 교체해준다.만약 1111과 같이 0이 없어 idx가 -1이된다면 01111로 생각하여 10111로 바꾼다.Long.parseLong(a,b) 함수를 이용하여 2진수로 바꾸고 정답을 answer 배열에 넣는다.import java.util.*;class Solution { public long[] solution(long[] numbers) { long[] answer = new long[numbers.length]; for(in..
Lv 2. n제곱배열자르기
·
Algorithm & Data Structures/Programers
코드 흐름코드의 규칙은 간단하다 left와 right 까지만을 찾아봐야한다 n 의 크기가 백만이므로 제곱을 루프 돌리면 overflow 발생한다.1차원배열에서의 그 위치의 자리는 Max(i/n,i%n) 임을 알게되었다.따라서 left와 right 까지 돌아주면서 list에 해당하는 값을 집어넣어 반환하였다.import java.util.*;class Solution { public List solution(int n, long left, long right) { List list = new ArrayList(); for(long i=left;i
Lv 2. 프렌즈4블록
·
Algorithm & Data Structures/Programers
코드 흐름우선 함수를 여러개 나누었다. while 문을 무한루프 돌려놓고 그안에 함수의 순서를 지정하였다.전역변수 flag로 바꿀 블록이 있는지없는지 체크,전역변수 check로 바꿀 블록의 위치를 체크전역변수 answer로 정답을 체크blockCheck 함수로 블록을 검사하고 check배열에 체크한다.blockDelete 함수로 바꿀블록을 지워준다.blockReset 함수로 지운블록의 위치를 삭제하고 다시 블록의 위치를 재설정한다 class Solution { boolean flag; boolean[][] check; int answer; public void blockCheck(char[][] table, int n, int m){ for(int i = 0 ; i
Lv 2. 2xn타일링
·
Algorithm & Data Structures/Programers
코드 흐름코드 흐름이랄것도 없이 사실 너무나도 많이 만났던 문제이다. DP, 즉 동적계획법을 사용하여야 하는 풀이임을 이미 진작에 알고 있었고0일때, 1일때, 2일때, 3일때 가능한 경우의 수만 잘 생각해본다면 사실 규칙을 발견할 수 있다. 아래 코드에 규칙이 담겨져 있다. arr[i]=(arr[i-1]+arr[i-2]) 이부분이다.package Programmers;class p2xn타일링 { public int solution(int n) { int[] arr = new int[n+1]; if(n
Lv 2. 숫자변환하기
·
Algorithm & Data Structures/Programers
코드 흐름우선 문제를 보자마자 BFS가 떠올랐다. 오랜만의 BFS라 상당히 긴장되었고 Node라는 클래스를 따로 하나 만들어 그안에 숫자와 깊이를 저장할 수 있도록 하였다.Queue 하나와 isVisited 배열을 하나 선언하여 BFS의 구동 조건을 갖추었다.Queue 에 최초의 값 x와 깊이 0을 노드에 담아 집어 넣어주고 그 최초의 값으로 하여금 연산후 y보다 작고 이전에 이미 나왔던 값이 아니라면 연산과 isVisited 체크를 진행 해주었다.while 문에서 q에서 뽑아낸 node 속 숫자가 y에 도달한다면 x가 연산후 y에 도달했음을 체크하는 isValid를 true로 바꾸고 반복문을 종료한다.import java.util.*;class Node{ int num; int depth; ..
Lv 2. 오픈채팅방
·
Algorithm & Data Structures/Programers
코드 흐름나가고 들어오고의 순서를 list에 저장하되 userId 기준으로 저장한다.map에는 닉네임의 변화를 key값을 id로 하여 저장한다.모든 기록들을 " " 스페이스바 기준으로 split 하여 Enter 관련인지 Change관련인지 Leave관련인지 분류한다Enter시에는 list와 map에 최신화Leave시에는 list만 최신화Change 시에는 map만 최신화이후 list를 순회돌면서 map의 최종 닉네임 값을 찾아 변경해준다.import java.util.*;class p오픈채팅방 { public String[] solution(String[] record) { ArrayList list = new ArrayList(); HashMap map = new Hash..
Lv 2. 택배상자
·
Algorithm & Data Structures/Programers
코드흐름영재가 만나게 되는 상자의 번호를 하나씩 for 문으로 루프를 통해 돌린다.answer은 여태껏 담아왔던 상자의 갯수이고 이는 order[answer] 은 다음 담아야할 상자를 가리키고 있다.만약 order[answer] 와 i가 일치하면 바로 담아도 되는 상자이므로 answer++해준다.만약 st.peek()과 i 가 같다면 보조 컨테이너에서 다음담을상자를 빼면 되므로 answer++ 해준다.아무런경우에도 해당되지 않으면 stack, 즉 보조 컨테이너에 집어 넣어준다.혹여나 answer, 즉 담아온 상자의 갯수가 order.size() 와 같다면 모두 담은 것이지만 덜담았다면 다시한번 stack에서 확인해주고 만약 더이상 stack 즉 보조 컨테이너에서 꺼내도 다음 담을상자를 찾을수 없다면 wh..
Lv 2. 스킬트리
·
Algorithm & Data Structures/Programers
코드 흐름우선 스킬트리를 역순으로 비교하였다. 스킬트리의 최종스킬의 인덱스는 중간 스킬의 인덱스 보다 커야만 성립하기에 각 유저의 스킬트리를 forEach문으로 들고왔다.그리고 그 스킬트리를 검사하는데 필요한 변수들을 선언하고skill의 스킬트리에 반하지 않는지 검사하기위해 while문으로 skill.length가 --를 거듭한 끝에 -1이 되기 전까지 루프를 열어주었다.indexOf와 valueOf charAt 메서드를 이용하여 스킬트리에 반하는 조건이 존재하는지 확인하였다.최종적으로 A->B->C 순으로 스킬트리를 진행하여야 할 때 A를 배우지 않고 B,C를 차례로 배우는 경우의 수에서 통과되는 오류가 발생하여 checkTree() 메서드로 유효성 검사를 한번더 진행후 answer 갯수를 더 해주었다..
Lv 2. 더 맵게
·
Algorithm & Data Structures/Programers
코드 흐름PriorityQueue 를 통해 우선순위를 오름차순으로 세팅하여 입력값의 스코빌 지수를 모두 pq안에 넣는다.자동으로 pq에서는 오름차순으로 정렬된 상태이기에 pq.poll() 한다면 최저값이 나오고 이를 pq.peek()시에 스코빌지수가 K이하이고 pq의 사이즈가 2개 이상일때만 섞을수 있기에 조건문을 달아 while루프를 선언한다.위 과정을 통해 pq사이즈가 2개 이하이거나 스코빌 최소지수가 k 이상이면 루프가 멈추기에 문제에서 알려준 대로 스코빌 지수를 더하고 곱하여 다시 pq에 넣는다. 그리고 그과정은 섞는과정이니 answer++ 해준다.최종적으로 남은 pq에 peek()의 스코빌지수가 k 이상이면 answer을 리턴한다. 아니라면 -1을 리턴하여 모든 음식의 스코빌 지수를 k이상으로 ..