본문 바로가기

Algorithm

(117)
[프로그래머스] Java - 경주로 건설 https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 생각 DFS에 DP를 섞어서 좀 끄적이다가 잘 안돼서 바로 BFS로 돌렸더니 풀었습니다..
[프로그래머스] Python - 키패드 누르기 https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 생각 현재 왼손과 오른손이 누르고있는 값을 저장하여 번호를 누를때마다 이 값을 갱신해줍니다. 이때 초기 시작 위치가 왼손은 '*' 이고 오른손은 '#'이기 때문에 초기값을 올바르게 설정해야 합니다. (처음에 left,right =0,0 으로 초기화해서 ..
[프로그래머스] Python - 괄호 변환 https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 생각 1. 올바른 괄호 문자열인지를 우선적으로 체크합니다. 2. 올바른 괄호 문자열이 아니면 재귀적인 처리를 모두 수행하는 solve 함수를 호출합니다. 3. solve 함수에서 균형잡힌 괄호 문자열 u,v로 분리합니다. 4. u가 올바른 괄호 문자열이면 v에 대해 다시 solve 함수를 호출합니다. -> u + solve(v) 5. u가 올바른 괄호 문자열이 아..
[프로그래머스] Python - 보석 쇼핑 https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 생각 어렵게 생각하면 어렵고 쉽게 생각하면 쉬운 문제였습니다.. 완전탐색으로 가능한 모든 구간을 찾아야 하는 줄 알았는데 투포인터+딕셔너리 자료구조로 풀면 되는 문제였습니다. tech.kakao.com/2020/07/01/2020-internship-test/ 해설을 참고하여 풀었습니다. 1. 보석의 종류별 갯수를 카운트 할 수 있게 딕셔너리를 만듭니다. 2. start, end 인덱스를 만듭니다. 3. 투 포..
[프로그래머스] Python - 신규 아이디 추천 https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 생각 문자열은 파이썬 감도 살릴겸 계속 파이썬으로 연습해야겠습니다! 파이썬에서 list를 반복문을 돌며 remove와 같은 업데이트 연산을 해줘야할땐 직접 list에 접근하지 않고 리스트 슬라이싱(for item in origin_list[:])으로 작업하면 됩니다. 3번째 단계에서 .이 두번이상연속되면 .을 하나로 치환해야 합니다. 저는 연속된 . 을 ..
[SWEA] JAVA - 2382. [모의 SW 역량테스트] 미생물 격리 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 미생물의 좌표가 겹쳤을때 가장 큰 미생물의 군집의 방향으로 방향을 다시 설정해야하고 그 다음 이동에서 미생물의 개수는 모두 누적된 미생물의 총 개수입니다. 이 문제를 풀면서 미생물의 타입에 대해 엄청나게 고민했습니다. 이와 비슷한 낚시왕 문제에서는 상어를 이동시키고 가장 큰 상어가 해당 좌표의 상어로 단순하게 대체되기 때문에 미생물 격리보다 쉽게 풀 수 있었습니다. 1. List, Queue ..
[SWEA] JAVA - 2112. [모의 SW 역량테스트] 보호 필름 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 행을 기준으로 약품을 주입한다, A를 주입한다, B를 주입한다 세가지 경우가 존재합니다. D개의 row에 이러한 세가지 상태가 적용되는 모든 경우를 탐색해야 합니다. 부분집합 개념을 사용하여 위의 세가지 상태를 재귀함수로 구현했습니다. 이때 map 상태배열을 직접적으로 수정하기 때문에 세개의 재귀 호출 다음 map 상태배열값을 원복해주는 작업이 필요합니다. 그 다음 base case에서는 내가..
[SWEA] JAVA - 1949. [모의 SW 역량테스트] 등산로 조성 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 가장 높은 봉우리에서부터 시작하여 가장 긴 경로를 찾는 문제입니다. 등산로를 만들때 현재위치보다 다음위치가 더 낮아야 등산로를 만들 수 있습니다. 이때 최장 등산로를 만들기 위해서 최대 K 값만큼 봉우리를 깎을 수 있지만 단 한번만 깎을 수 있습니다. 모든 경우를 탐색해야 하기 때문에 DFS 를 사용하여 완전탐색으로 문제를 풀었습니다. 제가 만든 재귀함수의 정의는 다음과 같습니다. solve(..