| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 익명객체
- 삼성sw문제
- backjoon
- 프로그래머스
- BFS
- 모바일
- CKLU
- 백준 알고리즘
- 네트워크
- 삼성SW테스트
- 데이터베이스
- Java
- 금융IT
- 너비탐색
- 개발
- 다이나믹 프로그래밍
- Android
- 백준
- IT
- dfs
- 재귀함수
- 안드로이드
- dp
- 조합
- 멀티스레드
- 익명클래스
- 자바
- 현대오토에버 코딩테스트
- 알고리즘
- 언더라이터
- Today
- Total
목록Algorithm (50)
Limky 삽질블로그
백준 BFS 문제 #1697- 숨바꼭질 https://www.acmicpc.net/problem/1697 사용한 개념 BFS개념를 응용했습니다. 우선 방문한 곳은 check 1차원 배열로 방문여부를 체크하여 방문하지 않은 곳만 방문을 하게끔 만들고, BFS 을 통해 방문하지 않은 곳을 계속해서 탐색하도록 합니다. 여기서 포인트는 방문할 때마다 몇번만에 해당 탐색지점에 왔는지 카운트를 해주는 것입니다. *2에서 5를 찾는 경우 예를 들어 2번에서 시작한다고 치고, 2번에서 *2를 해 4번으로 갔다면, 처음 2번에는 카운트 0을 저장하고 4번에 카운트는 0+1 = 1 입니다. 다음 4번에서 +1을 했다면 5번에는 카운트 0+1+1 = 2 입니다. 이런식으로 2에서 시작해 5번으로 도착할때 카운트는 결국 카운..
다익스트라 최단거리 알고리즘(Dijkstra) 다익스트라 알고리즘은 워낙 유명하죠 ㅎㅎ 다익스트라 알고리즘은 그래프에 있어서 탐색 시작 노드에서 탐색할 노드까지의 최단거리를 구하는 알고리즘입니다. 다익스트라 알고리즘은 실생활에서도 많이 쓰입니다. 지하철 최단거리 노선을 알려준다거나, 네비게이션 최단 경로를 알려주는 등 굉장히 활용도가 높은 알고리즘 입니다. 일단 노드간 가중치가 있어 최단거리를 구할 수 있습니다. 연결되 노드간 가중치의 합이 최단거리라고 할 수 있기 때문이죠. 아래 전체소스에 주석으로 상세히 적어놓았으나, 몇가지 포인트는 알고있어야 합니다. 원리는 다음과 같습니다. 경로를 통해 지나온 노드간 가중치들의 합이 가장 작은 값을 계속 갱신하며, 최단거리 가중치 합을 구하는 것입니다. 예를 들어..
백준 DFS 문제#2606 - 바이러스(Virus) https://www.acmicpc.net/problem/2606 사용한 개념 DFS깊이탐색을 이용했습니다.문제를 보면, 결국 무조건 1과 연결되어 있는 컴퓨터 갯수를 새는 것입니다. 컴퓨터 1과 연결되어 있으면 계속 깊이탐색을 해서 연결된 컴퓨터 갯수를 카운트하면 답은 쉽게 나옵니다. 컴퓨터 1과 연결되어있지 않는 또 다른 네트워크 영역은 신경쓸 필요도 없습니다. 따라서 소스에서 보면 알 수 있듯이 DFS(1)을 주어 무조건 시작은 1번 컴퓨터에서 시작함을 알 수 있습니다. DFS 기본 개념을 이해하면 쉽게 풀수있고 DFS를 잘 모르면, 어렵습니다.저는 기본적으로 인접리스트 방식의 DFS 깊이탐색을 했습니다.혹, DFS 기본개념을 모르시면 아래 링크에..
백준 DFS 문제 #2667 - 단지번호붙이기 https://www.acmicpc.net/problem/2667 사용한 개념 1) DFS 저는 깊이탐색을 사용했습니다. 우선, 2차원 배열에서 0이 아닌 1인 경우에 깊이탐색을 시작하여 인접해있는 1을 모두 찾게합니다. 그 다음 다시 탐색을 이어가 0이 아닌 1인경우 다시 깊이탐색을 시작합니다. 여기서 달라지는 점은, 이미 탐색을 했다라는 표시를 하기 위해 임시 변수 값이 CNT의 값을 증가시켜 해당 값으로 매핑시켜 표시합니ㅁ다. 따라서.. 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 0 0 1 인 경우, 2 2 0 0 0 2 0 0 0 0 0 0 0 3 3 4 4 0 3 3 0 4 0 0 3 위와 같이 매핑되는 것입니다...
삼성 SW테스트#15684 - 사다리 조작(Ladder Manipulation) https://www.acmicpc.net/problem/15684 사용한 개념 1. 중복이 없는 조합 해당 문제를 푸는데 있어 많은 개념이 사용되지는 않았습니다. 다만.. 아래와 같은 고민을 많이했습니다. 1. 사다리를 어떻게 저장하고 표현할 것인가??2. 사다리를 탈때, 원리가 무엇이고 해당 원리를 어떻게 반영할까?... 또한, 문제를 풀면서...보완해야할 점도 생각하게 되었습니다. 중복이 없는 조합을 재귀로 구현했지만, 나중에는 재귀방식이 아닌 더 간단한 방식으로 조합을 구하는 방법을 강구해야 할 것 같습니다. 소스가 복잡해지고, 예외처리를 해야하는 부분이 늘어나는 느낌이라서요...ㅎㅎ 자 그럼 ... 1. 사다리를 어..
삼성 SW테스트#15685 - 드래곤 커브(Dragon Curve) https://www.acmicpc.net/problem/15685 사용한 개념 1. 음...규칙찾기?(수열과 같은 느낌) 처음 이런류의 문제를 시뮬레이션이라 부른다고 합니다.. 백준 알고리즘 카테고리에는 시뮬레이션으로 분류되어있네요~ 문제를 이해하셨다면 아시겠지만, 분명 세대가 증가할때마다, 이전 세대와의 어떠한 규칙이 있음을 의심하고 그 규칙을 찾는것이 제일 먼저 선행 되어야 합니다. 보통 대게 이런문제가 규칙을 찾고 그 규칙대로 구현을 하면 되는 문제인 것 같습니다. 자.. 그럼 규칙을 찾아보겠습니다. 저는 무식하지만 제일 간단한 접근방법인 한단계씩 적어서 어떠한 규칙이 있는지 파악하겠습니다. 다음과 같이 방향이 주어질때, 0 방향..
삼성 SW테스트#15686 - 치킨 배달 https://www.acmicpc.net/problem/15686 사용한 개념 1. 경우의 수 (재귀)2. BFS 탐색 전체적인 알고리즘을 작성하기 앞서, 문제를 해결하기 위해 어떤 알고리즘들이 사용되는지 생각해보았습니다. 먼저, 문제에서도 알 수 있듯이, 전체 치킨집들 중에서 특정 치킨집들만 선택하기 때문에 경우의 수 조합이 필요합니다. 또한, 2차원 배열상 A와 B 사이의 거리를 구해야하기 때문에 탐색 알고리즘이 필요합니다. 저는 BFS 너비탐색으로 탐색하기로 했습니다. 알고리즘 선택이 끝났으면, 이제 전체적인 프로세스 순서를 생각해봅시다. 먼저... 순서는 다음과 같이 생각할 수 있겠네요.. 1. 전체 치킨집 중 N개 치킨집을 간택한다. 즉 nCr2. 각각..
JAVA로 중복이 없고, 순서도 없는 조합(Combination) 구하기! 이번 시간은 JAVA로 중복이 없는 조합을 구하는 방법에 대해 알아보겠습니다. 우선 1,2,3 구슬이 있습니다. 3개중에 2개를 뽑는다고 했을때, 모든 경우의 수는 다음과 같습니다. 1,2 1,3 2,1 2,3 3,1 3,2 총 6가지 입니다. 팩토리얼 개념으로 접근하면 3*2 = 6 가지임을 알 수 있습니다. 이제 여기서 중복을 제거한 경우의 수만 따진다면, 1,2 1,3 2,3 총 3가지 입니다. 이를 조합이라고 합니다. 수학적인 기호로 나타내면! nCr 입니다. 즉, 중복이 없고, 순서도 없는 경우의 수(조합)입니다. n은 총 갯수, r 은 뽑아야 할 갯수 입니다. 저는 배열과 재귀함수를 통해 nCr에 대해서 구해보겠습니다...