본문 바로가기

728x90

알고리즘(w.KOTLIN)/자료구조

(5)
[프로그래머스][Level1][178871] 달리기 경주 https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 1. 주어진 callings, players 배열을 indexOf 를 이용하여 위치를 찾아 서로 swap 을 하게 되면 시간 초과 오류가 발생한다. 2. map 의 containsKey 를 이용하여 시간초과를 해결한다. 3. 이때 (Int, String) = (순위, 선수 이름) 을 가지는 map1과 (String, Int) = (선수 이름, 순위) 을 가지는 map2 를 선언한다. ..
[백준][KOTLIN][1406] 에디터 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제 풀이 1. substring 을 이용해서 문자열을 변경하여 구현할 경우 시간초과가 발생한다. 2. left/right stack 을 정의해서 처음으로 입력된 문자열을 left stack 에 저장한다. 3. 편집기의 명령어가 "L" 일 경우 커서가 왼쪽으로 한 칸 이동했으므로 left stack 의 top 값을 빼서 right stack 에 저장한다. 이때 left stack 이 비어있으면 조건..
[알고리즘][KOTLIN] 두 큐 합 같게 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 1. 전체 이동하는 횟수(limit) 를 구한다. 1-1. 3번 예시를 이용하면 4 * (queue1 의 개수) 로 전체 이동이 되고 원래자리로 돌아오는 것을 알 수 있다. 2. limit 크기 동안 탐색 한다. 3. queue.sum() 을 이용하면 시간 초과가 발생하기 때문에 입력을 각 queue 에 저장 시 sum1, sum2 도 같이 저장한다. 4. queue add/pop 수..
[알고리즘][KOTLIN] 택배상자 https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 1. 트럭에 실는 상자를 저장하는 result list 를 선언한다. result 의 크기가 결과로 도출 된다. 2. 메인/보조 컨테이너 벨트를 나타내는 Stack 을 선언한다. 이때 메인 컨테이너 벨트를 order 의 크기 만큼 내림 차순으로 실어야 할 상자를 Stack 에 저장한다. 3. order 배열의 index 를 0으로 선언하고 while 문을 통해서 조건을 탐색 한다. 3..
[알고리즘][KOTLIN] 롤케이크 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 1. topping 배열을 copyOfRange 를 이용하여 두 가지 Set 으로 나누어 서로의 크기가 같은 지 비교해서 결과를 구할 경우 첫 번째 케이스를 제외하고는 시간 초과가 발생한다. 2. 시간 초과가 발생하지 않기 위해서 for loop 를 한 번만 수행해야 한다. 3. loop 를 한 번만 수행하면서 철수와 동생의 토핑 종류 개수를 비교하는 로직을 구현 한다. 3-1. 입력..