본문 바로가기

반응형

취업준비/알고리즘 문제 반추

(9)
프로그래머스 순위 검색 [level2][2021][카카오] 문제를 풀 때 참고한 분의 블로그 https://loosie.tistory.com/265 -을 위한 조합을 생각해야 했다. 그 자리에서 dfs를 구현했다. depth = 0으로 두고 n개 중에서 n개를 뽑는 경우의 수를 체크했다. Key에 depth 별로 -을 뽑고 안 뽑고로 진행했다. => 1개의 info당 16개의 경우의 수가 나온다. void dfs(String pos, int depth, String[] info) { if(depth == 4) { if(!allInfo.containsKey(pos)) { in = new ArrayList(); in.add(Integer.parseInt(info[4])); allInfo.put(pos, in); }else { allInfo.get(pos).add(I..
2021. 자바. 순열 + 중복 DFS로 구현하기 [ 중복 버전 포함 ] 보호되어 있는 글입니다.
SWEA : 수영장 문제 [자바][2021.10 기록] 참고한 블로그 : https://hoho325.tistory.com/112 [SWEA] 모의 SW 역량 테스트 :: 1952번 수영장 자바(java) 풀이 sw expert academy 1952번 수영장 자바(java) 풀이 모의 SW 역량테스트 수영장 sw expert academy 1952번 수영장 문제정리 이용권 1일 이용권 : 하루 이용 1달 이용권: 한달 이용. 매달 1일 부터 시작 3달 이용권:.. hoho325.tistory.com [ 깔끔한 코드 + 설명에 문제를 이해하는데 도움이 되었다. ] 정답률 66%대 문제. 문제를 봤을 때는 그리디하게 접근해야 하는 줄 알았다. 이성적으로 3달 요금이 1달 요금보다 저렴할 것이기 때문이다. 하지만 문제에는 이성적으로 3달 요금이 3달치 비용보다 ..
프로그래머스 사이트 문제 정리하기. [20210928시작][최신 갱신: 20210930] 코딩 테스트를 통과하기 위한 역량을 길러준 문제들 정리. 코드를 초기화하고 복습으로 다시 풀면 여러 유형의 문제들에 대한 감을 익히는데 도움을 주지 않을까 한다. 그래서 유형별 문제들을 정리해본다! 내가 경험한 바로는 1 티어 기업들(라인, 네이버, 카카오, 쿠팡 등등...)의 코딩 테스트를 통과하려면 Level 3와 Level 2(중에서도 난이도 높은 분야)의 문제를 풀어본 배경들이 있어야 한다. (필수적!!) 또한 몇몇 문제에서는 효율성의 함정이 있을 수 있다는 것도 고려해야 한다. 코딩 테스트에서는 알고리즘 풀이 + 효율성 테스트에 대한 문제가 각각 출시되기 때문!! 완전 탐색(BFS, DFS) 순열(Permutation) [ 순열을 직접 짜보는 힘을 기르자! ] 1. 단체 사진 찍기. link :..
2021 카카오 블라인드 채용 메뉴 리뉴얼 [프로그래머스][Level2] [자바] 문제 분류 - 프로그래머스 레벨 2 [ 체감은 3 정도... ] - 완전 탐색(조합), Map 자료구조, 정렬 필요한 예상 시간 - 빠르게 파악하면 1시간. 디버그 하면서 진행하면 2시간 첫 25분의 고민과정 손님이 주문한 단품 메뉴들에서 반복해서 주문되는 단품 메뉴의 조합을 찾고 우선순위를 매기는 문제이다. 10~ 15분 정도를 고민했을 때 그렇다 할 알고리즘이 떠오르지 않았다. 막막할 때의 해결책은 모든 가능성을 탐색하는 것이다. 그리고 알고리즘에서는 이 방식을 완전 탐색이라고 부른다. 각 손님이 주문한 메뉴들에서 course로 들어온 인자들에 대해서 조합의 개수를 구하는 것이다. 그리고 그 조합들을 Map 자료구조에 넣어서 카운팅을 하는 것! Map map = new HashMap(); boolea..
프로그래머스 - 단체사진 찍기 [Level2] [ 카카오 2017 본선] [자바] 첫 25분의 고민 과정 3개의 모듈로 분해하기 문제를 읽고 가장 먼저 떠올린 것은 순열이었다. 조건을 파싱 해서 조건에 맞게 인원들을 배치시키고 순열의 결과를 얻어내고자 했다. 예를들어 라이언와 어피치의 거리가 0이라면 라이언와 어피치를 하나로 묶고 나머지 인원들을 배치시키는 방식으로 순열의 경우의 수를 구하는 것이다. 하지만 n개의 원소로 주어지는 data는 무려 100개까지도 주어질 수 있다. 이 모든 것을 파싱해서 캐릭터들을 묶어내는 것?은 불가하다고 판단했다. [ data로 주어질 수 있는 경우의 수는 어마무시하다. 조건 3개, 숫자 간격 0~6, 케릭터 2개를 뽑는 조합... ] 다행히도 친구들의 수는 8개로 고정적이다. 완전 탐색으로 순열을 고려하면 8!로 40320의 경우의 수가 존재한다. ..
2019 카카오 개발자 겨울 인턴십 - 튜플- [프로그래머스][Level2] 1시간 30분 ~ 2시간이 걸린 문제. 정렬 + Map 자료구조 + String API + pointer(알고리즘 기법)의 활용 등등 알고리즘에서 자주 활용하는 기술들을 많이 활용할 수 있었던 문제여서 좋았다. 다른 사람들의 풀이를 보니 { , } 구분을 위해서 replaceAll을 활용하는 경우가 많았다. [ 한수 배우고 간다. ] 나의 경우 {의 위치와 }위치를 가리키는 포인터 변수를 따로 두어서 문제를 풀었다. 크게 3부분으로 나뉘어 문제를 바라보고 풀어야 할 만큼 까다로운 문제였다. 1. 문제에 대한 접근 문제를 읽자마다 split(",")하고 배열 길이만큼 정렬한 뒤 값을 추출해서 Map에 넣어서 처리하면 그만이겠구먼! 하고 자신 있게 접근했다. split(",")하는 순간 집합의 내부에 있는 ..
프로그래머스 Level2 프린터. [상당히 애먹은 문제..] [ 나만의 풀이 ] Queue의 활용보다는 도메인 로직이 더 까다로웠던 문제 문제가 언급한 규칙 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. J를 인쇄하고 다시 1, 2, 3의 규칙이 진행된다. EX. [2, 1, 3, 5, 4]라고 할 때 가장 중요한 우선순위를 가진 5가 나올때까지 앞에 모든 문서들은 뒤로 넘어간다. => [5, 4, 2, 1, 3] 이후 5를 프린트한다. [ 4, 2, 1, 3] 4가 다음으로 우선순위가 높으므로 바로 프린트한다. [2, 1, 3] => [1, 3, 2] => [3, 2, 1] 이 되며 순차적으로 3, ..

반응형