전체 글 썸네일형 리스트형 [LEETCODE] 51. N-Queens 문제 출처 : https://leetcode.com/problems/n-queens/submissions/ 사용한 알고리즘 backtracking 풀이로직 ㄴㅇㄹㅇㄴ ㄴㅇㄹ 코드 어려웠던 점 backtracking 문제를 간만에 풀어 어려웠고, 이걸 한번에 어떻게 처리하고 다시 돌릴지 고민을 많이했습니다. 제가 푼 과정이 N-Queens의 갯수를 세는 것을 빠르게 할 수 있는 코드였기 때문에 모든 경우를 넣은 후 다시 올바른 형태로 바꿔 집어넣어야했다. board를 바꿔가면서 진행하는데, answer에 넣고나면 그 board를 이용해 바꾸는 것이기때문에 최종값에 계속 초기 board값이 들어갔다 -> board가 계속 바뀌기 때문에 answer의 board도 함께 바뀌는것이다! deepcopy를 이용해서.. 더보기 [알고리즘] heap 구조 1-1. 힙 자료구조 완전 이진트리 중 하나 -> 웃너순위 큐를 위해 만들어진 자료구조 여러개의 값들 중에 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조 힙 트리에서는 중복된 값을 허용한다. (이진 탐색 트리에서는 중복된 값을 허용하지 않음) heapq 모듈은 이진트리 기반의 최소힙 자료구조를 제공한다. 1-2. 힙 종류 최대 힙(max heap) 부모 노드의 키 값이 자식 노드의 값보다 크거나 같은 완전 이진트리 가장 큰 값은 언제나 index = 0에 위치함 (=> 이진트리의 루트에 위치) heap[k] >= heap[2*k+1] and heap[k] >= heap[2*k+2] 최소 힙(min heap) 부모 노드의 키 값이 자식 노드의 값보다 작거나 같은 완전이진트리 가장 작은 값은 언제나.. 더보기 [알고리즘] LCS 알고리즘 1. LCS 알고리즘이란? - LCS = 최장 공통부분 문자열 - Substring : 연속된 부분 문자열 ex. x = 'CCAYCKP' y = 'CCAPCAK' - Subsequence : 연속되지 않은 부분 문자열 ex. x = 'ACAYKP' y = 'CAPCAK' 2. LCS 알고리즘 구현 (LCS 길이찾기) 문제 : [백준] 9251. LCS https://www.acmicpc.net/problem/9251 [풀이과정] 0 C A P C A K 0 0 0 0 0 0 0 0 A 0 0 1 1 1 1 1 C 0 1 1 1 2 2 2 A 0 1 2 2 2 3 3 Y 0 1 2 2 2 3 3 K 0 1 2 2 3 3 4 P 0 1 2 3 3 3 4 x와 y에 가장 최근에 추가된 글자가 서로 같으면 b.. 더보기 [SWEA] 1264.이미지 유사도 검사 문제링크 : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18Q_MqIvUCFAZN&categoryId=AV18Q_MqIvUCFAZN&categoryType=CODE&&& 시간복잡도 On(n^2) 사용한 알고리즘 LCS(최장 공통부분 수열) 알고리즘 풀이로직 LCS 알고리즘 사용 [https://gayoung78.tistory.com/72] 코드 어려운점 이 알고리즘을 알기 전까지 이런 로직으로 구현 x='RBKBGRBGGG', y='BGKRBRKBGB'를 비교할 때 x가 R일 때 y에 있는지 확인하고, x가 RB일 때, y의 index를 활용해서 RB가 있는지 확인하는 방식으로 가려고 했다. 더보기 [LEETCODE] 17. Letter Combinations of a Phone Number 시간복잡도 O(n^3) 사용한 알고리즘 무슨 알고리즘을까요..? 풀이 로직 각 숫자가 가지고 있는 문자열을 설정한다 0 더보기 [LEET CODE] 131. Palindrome Partitioning 시간복잡도 O(n^2) 사용한 알고리즘 재귀 알고리즘 풀이 로직 Palindrome인지 확인하는 함수 만들기 Palindrome인 문자라면 list에 추가하고, 그 다음 문자부터 다시 확인 -> 재귀 코드 어려웠던 점 반복되는 과정이라 재귀를 사용해야한다는 것은 파악했지만, 어떻게 처리해야 i에 따라서 추가해줄 지에 대한 고민에서 시간이 생각보다 오래걸렸습니다. 더보기 [Java] 문자열 붙이는 방법 1. concat() - 합친 문자열을 String으로 생성한다. 2. + - 문자열을 먼저 StringBuilder로 변환한 후 append로 문자열을 더하고 toString()으로 문자열로 변환한다. 3. StringBuilder의 append 이용 ▶ 두개의 문자열을 더할 때는 concat이 좋고, 여러개를 더해줄 때는 StringBuilder를 이용하는 것이 좋다. 더보기 [Java] String, StringBuilder, StringBuffer의 차이점 1. String, StringBuilder, StringBuffer 공통점 - 문자열을 저장하고 관리하는 클래스 2. String - 한번 생성되면 할당된 공간이 변하지 않는다 = 불변 - 객체 생성 속도가 빠르다(StringBuffer, StringBuilder -> buffer크기 초기 설정 -> 생성속도 느림) - 많은 양의 문자열 수정이 아니라면 String객체 사용이 더 효율적 - 단순 조회 연산에서는 StringBuffer, StringBuilder보다 빠름 3. StringBuilder, StringBuffer - 한번 생성되면 할당된 공간의 크기가 변함 = 가변 - buffer크기 초기 설정해야하므로 생성속도가 느림 - 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우, 기존의 .. 더보기 이전 1 2 3 4 5 6 7 ··· 13 다음