기록의 공유

잊지않기 위한 기록의 공유

Backend/Problem Solving 88

코데 대비5 - Deque(덱),동적프로그래밍

1. Deque란?Deque(Double Ended Queue, 덱)는 양쪽 끝에서 삽입/삭제가 모두 가능한 자료구조입니다. [앞] ← [요소1] [요소2] [요소3] → [뒤] ↕ ↕ 삽입/삭제 삽입/삭제 Stack처럼도 사용 가능 (LIFO)Queue처럼도 사용 가능 (FIFO)양방향 큐로도 사용 가능 Deque deque = new ArrayDeque(); 동적 배열 기반Stack, Queue보다 빠름null 저장 불가양쪽끝 연산이 O(1) deque.addFirst(1);deque.push(1); // 앞쪽 삽입deque.addLast(1);deque.offer(1); // 뒤쪽 삽입deque.peekFirst();dequ..

코데 대비4 - 정규표현식(문자열검증), 우선순위큐,n진법

문자열검사방법1. Character 클래스 사용2. Stream API 사용3. 정규표현식 사용 문자열에 숫자가 있는지 검사Character 클래스 사용public static boolean hasDigit(String str) { for (char c : str.toCharArray()) { if (Character.isDigit(c)) { return true; } } return false;}Stream API를 사용public static boolean hasDigit(String str) { return str.chars().anyMatch(Character::isDigit);}정규표현식 사용public static boolea..

코데 대비3 - 조합,소수구하기,Collection 요소 삭제시 주의점

조합(Combination)순서를 고려하지 않고 n개 중에서 r개를 뽑는 경우의 수 예시: [1, 2, 3]에서 2개 뽑기결과: [1,2], [1,3], [2,3] (총 3개)❌ [2,1]은 [1,2]와 같은 조합이므로 제외! 순열과의 차이순열: [1,2]와 [2,1]은 다름조합: [1,2]와 [2,1]은 같음public class prac { static int[] array = {1, 2, 3}; static int n = array.length; static int r = 2; static int[] result = new int[r]; public static void main(String[] args) { combination(0,0); } p..

코테 대비 2 - 약수구하기, Collection 최대값 구하기, 순열,백트래킹

약수 구하기약수를 구하는 기본적인 방법public List getDivisors(int number) { ArrayList list = new ArrayList(); // 1부터 해당 숫자까지 반복한다. for (int i = 1; i 기본적인 방법 말고 최적화된 방법을 써야한다.import java.util.*;public class Solution { public List getDivisors(int n) { List divisors = new ArrayList(); // Math.sqrt(n)를 따로 변수에 저장해서 쓰던가 하지않으면 매번 계산해야해서 느리다. i * i가 속도도 빠름 fo..

코테 대비 1 - List,Map,Comparator,Stream API

List 관련 지식 + Stream API + Comparator + Comparable불변,가변 ListList integerList = List.of(1, 2, 3, 4, 5); // List.of()는 읽기만 가능하고 요소 추가,수정,삭제 불가List integerList2 = Arrays.asList(1, 2, 3, 4, 5); // Arrays.asList()는 읽기와 요소 수정 가능, 추가 삭제 불가하다.List goodIntegerList = new ArrayList(); // new ArrayList()로 생성된 리스트는 읽기와 요소의 수정,삭제,추가 전부 가능하다./** * Collection의 요소는 객체여야한다. * int[] 또한 하나의 배열 객체이다. int[]라는 참조타입변수에는..

프로그래머스] n으로 표현

https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1. DFS DFS를 통해 +,-,*,/ 사칙연산을 하는것도 중요하지만 현재 값에다가 N,NN,NNN.... 의 값을 사칙연산해야한다. import java.util.*; class Solution { static int n,target; static int result = Integer.MAX_VALUE; public int solution(int N, int number) { n = N;..

프로그래머스] 퍼즐 조각 채우기

https://school.programmers.co.kr/learn/courses/30/lessons/84021 참고 https://tmdrl5779.tistory.com/206 풀이 1. bfs를 이용하여 board 에서는 빈칸의 조각을 table에서는 퍼즐의 조각에 대한 정보를 저장한다. 각 조각의 정보는 원점을 기준(2차원배열을 사용하므로 i인덱스 0 j 인덱스0를 의미)으로 정렬한다. bfs를 이용하여 각 노드그룹을 방문하고, 각 노드그룹의 좌표값들을 저장한다고 생각하면 된다. [board, table의 정보가 2차원배열로 들어온다. xy그래프로 생각해서 원점기준 정렬을 하지만 실제로 저장된 조각의 정보 좌표는 2차원배열의 인덱스로 보면 된다.] 조각들의 좌표 정렬은 i인덱스의 오름차순, i가 ..

프로그래머스] 아이템줍기

https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 2차원배열로 들어오는 직사각형의 정보를 받고, 테두리는 1로 채우고, 내부내용은 2로 채워서 전체 테두리 부분을 구한다. x,y는 y가 2차원배열의 i인덱스 , x가 2차원배열의 j인덱스로 생각하고 진행한다. 문제발생 -> 꺾어서 진행해야하는부분이 bfs로 통과할때 문제가 발생함. 꺾어서 내려가야하는데 바로 쭉내려가버림 정답은 17인데 안쪽으로 들어갔다나오지않아서 15로 출력됨. 해결방안 -..

프로그래머스] 단어 변환

https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 바꿀수있는단어를 큐에담아 bfs진행 import java.util.*; class Solution { static boolean[] visited; static int n; static int result =0; public int solution(String begin, String target, String[] words) { /* 문자의 차이가 1개인 단어를 찾아서 bfs진행 */ n ..

프로그래머스] 네트워크

https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dfs또는 bfs가 몇번동작하는 문제 백준의 촌수 구하는 문제와 비슷. 문제는 간선의 정보를 주는것이 아니라 인접행렬을 전달해준다. 매번 간선의정보를 받아 인접리스트를 만들어서 사용했었다. 1. 인접행렬을 인접리스트로 바꿔서 푸는 방법 2. 인접행렬로 푸는 방법을 시도한다. 인접리스트 또는 인접행렬의 전체를 순회하며 방문한 노드인지 확인한다. 1. 인접행렬을 인접리스트로 바꿔서 푸는 방법 i..