Algorithm
-
[문자열] 문제 이름 : String ReductionAlgorithm/HackerRank 2021. 7. 19. 11:39
문제 설명 알파벳 소문자로 이루어진 문자열이 주어질 때 해당 문자열의 부분 문자열이 모두 서로 다르도록 문자열을 줄일 때 최소 삭제 횟수를 구해라(문자열의 아무 index 삭제 가능) 사용 개념 문자열, 반복문 문제 해결 아이디어 부분문자열의 경우 문자 1개도 부분 문자열에 해당한다. 즉 부분 문자열이 서로 다르도록 하려면, 문자열에서 각 알파벳이 1개만 존재해야 한다. 따라서 최소 삭제의 경우는 2개 이상 존재하는 알파벳들을 1개 빼고 모두 삭제하면 된다. 코드 구현 방식) ㄱ. 알파벳 등장 횟수 저장을 위한 int 배열 선언(index 0 = a, index 1 = b . . .) ㄴ. String 클래스의 charAt()을 사용해 각 문자 접근 ㄷ. 각 알파벳에 해당하는 ㄱ에서 생성한 배열의 ind..
-
[Array, Sorting] 문제 이름 : Picking TicketsAlgorithm/HackerRank 2021. 7. 17. 17:33
문제 설명 주어진 배열을 정렬시킨 후 조건을 만족하는 부분 배열의 최대 크기 구하기 조건 1. 부분배열의 원소들은 이어져 있어야 함 2. 모든 원소 j와 j+1의 값의 차이의 절대값은 0 이나 1 이어야 함 1. 사용 알고리즘 배열 정렬 2. 문제 해결 아이디어 우선 주어진 리스트를 오름차순 정렬시킨 후, 첫번째 원소부터 시작하여 조건을 만족하지 않는 원소를 만날 때까지 반복하여 조건을 만족하는 부분 배열들을 구하고, 그 중 가장 큰 크기의 부분배열을 찾는다. 3. 코드 구현방식) 주어진 리스트 오름차순 정렬 -> Collections 클래스의 sort() 사용 첫번째 원소부터 조건 만족하는 부분 배열 찾기 -> 반복문 사용하여 각 리스트의 원소 접근 //부분배열의 최대 크기 반환! static int ..
-
[DFS/BFS] 개념정리3 - DFS과 BFSAlgorithm/개념정리 2021. 7. 17. 14:29
그래프 탐색이란? → 하나의 정점을 시작으로 다수의 정점을 방문하는 것 DFS(Depth First Search) 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 이 알고리즘은 특정한 경로로 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로로 탐색하는 알고리즘임 사용 자료구조 : 스택 동작 과정 : 탐색 시작 노드를 스택에 삽입하고 방문 처리함 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면, 그 인접 노드를 스택에 넣고 방문처리 함 방문하지 않은 인접노드가 없으면 스택에서 최상단 노드를 꺼냄 2번의 과정을 더 이상 수행할 수 없을 때까지 반복함 —> 방문 처리 : 스택에 한 번 삽입되어 처리된 노드가 다시 삽입되지 않..
-
[추가] 복잡도Algorithm/개념정리 2021. 7. 9. 10:58
복잡도?! 복잡도(Complexity)는 알고리즘의 성능을 나타내는 척도 시간복잡도 + 공간복잡도 시간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지 → 알고리즘을 위해 필요한 연산 횟수 측정 공간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지 → 알고리즘을 위해 필요한 메모리의 양 측정 → 둘은 일종의 거래 관계가 성립함 → 메모리를 조금 더 많이 사용하는 대신 반복되는 연산을 생략하는 등 → 메모리를 더 많이 사용해서 시간을 비약적으로 줄이는 방법을 '메모이제이션' 기법이라고 함 복잡도가 낮을수록 좋은 알고리즘 시간 복잡도 알고리즘 문제 풀 때 단순히 '복잡도'는 시간 복잡도를 의미함 시간복잡도 표현 시 '빅오(Big-O) 표기법'을 사용함 →..