Algorithm
-
[알고리즘] BFSAlgorithm/theory 2022. 9. 20. 22:28
변수 설명 board = 판 vis = 방문 여부 n,m 각각 행과 열의 개수 dx,dy = 상하좌우 처리 위한 변수 1. (0,0) 방문 처리 후 큐에 추가 2. 상하좌우 살피며 큐에 추가 3. 큐의 front를 cur에 저장 후 pop 4. dx,dy를 활용하여 상하좌우 탐색 (대부분 x가 행 , y 가 열을 의미함) 5. dx,dy 가 범위에 있는지 부터 확인 중요(처리 안 할 시에 런타임 에러남) 자주 하는 실수 1. 시작점에 방문했다는 표시를 남기지 않음 2. 큐에 넣을 때 방문했다는 표시를 하는 대신 큐에서 빼낼 때 방문했다는 표시를 남김 -> 시간초과 혹은 메모리 초과 발생 3. 이웃한 원소가 범위를 벗어났는지에 대한 체크를 잘못 함 bfs 문제 기본 1926: 그림 더보기 1. 상하좌우로 ..
-
[코딩 테스트] 탐색Algorithm/theory 2022. 9. 14. 21:20
다음은 코딩 테스트에 빈출되는 탐색의 빈출 유형과 대비 방법이다. 용어 정리 그래프: 여러 개체들이 연결되어 있는 자료구조 탐색: 특정 개체를 찾기 위한 알고리즘 그래프 탐색 알고리즘: 여러 개체들이 연결되어있는 구조에서 특정 개체를 찾는 알고리즘 대표적 문제 유형 밑 3가지의 case가 대표적인 탐색의 문제 유형이며, 2개가 섞여 출제 되는 문제도 있다. 1. 경로탐색 유형(최단거리, 시간) 2. 네트워크 유형(연결): 여러 개체들이 주어진 상태에서 연결되어 있는 개체의 그룹 개수 구하기, 연결 여부 확인하기 3. 조합 유형(모든 조합 만들기): 순열, 조합 방식 구현 방법 DFS: 재귀 함수 => 탈출 조건을 만족 할 때까지 재귀함수를 구현하고, 이후 파라미터 값을 바꾸어가며 정답을 끝까지 도출 ex..
-
[개념] 문자열Algorithm/theory 2022. 8. 28. 15:05
개념 - 문자열 조작이란 문자열을 변경하거나 분리하는 등의 여러 과정을 의미 - 문자열은 로우 레벨에서 조작하거나, 문자형이 따로 없는 C 같은 경우 조작이 매우 까다로움 - 대부분의 언어에서는 문자열 조작을 위한 다양한 기능을 기본으로 제공하므로 기본 기능들을 잘 활용하는 것이 중요 문자열 처리가 사용되는 분야 1) 정보 처리 분야: 현대의 거의 모든 정보는 문자열로 구성되어 있어, 문자열 처리는 정보 처리에 핵심적인 역할을 한다. 2) 통신 시스템 분야: 메세지, 이메일 전송 시 문자열을 한곳에서 다른 한 곳으로 전송한다. 또한 데이터 전송은 문자열 처리 알고리즘이 탄생한 배경이기도 하다. 3) 프로그래밍 시스템 분야: 프로그램은 자체가 문자열로 구성되어져 있다. 예제1 유효한 팰린드롬_ from l..
-
[개념] BacktrackingAlgorithm/theory 2022. 8. 23. 21:55
Backtracking - 문제의 해결 방법을 탐색하다 가능성이 없다고 판단되는 후보를 즉시 가지치기(Pruning)하는 방식 - bfs 와 같은 방식으로 탐색하는 모든 방법으로, bfs는 backtracking의 골격을 이루는 알고리즘 - bfs 와 같은 재귀 방식으로 구현 - 운이 좋으면 시행착오를 거치지 않고 해답을 얻을 수 있지만, 최악의 경우 모든 경로를 거쳐야 함 - backtracking 에서 사용되는 가지치기(Pruning) 는 트리의 탐색 최적화 문제(제약 충족 문제(constraint satifaction problems))와도 연관 * 제약 충족 문제 : 수많은 제약 조건(constraint)을 충족하는 상태(States)를 찾아내는 수학 문제 : ex) 스토쿠, 8퀸 문제, 4색 문..
-
[Lv.1] 신고 결과 받기Algorithm/programers 2022. 8. 17. 15:03
문제 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉,..
-
[Lv.1] 신규 아이디 추천Algorithm/programers 2022. 8. 17. 14:56
문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이..
-
[Lv.1] 숫자 문자열과 영단어Algorithm/programers 2022. 8. 17. 14:46
문제 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자 영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 sev..