목록알고리즘/프로그래머스 (14)
시작하는 중
https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해당 문제는 문자열의 파싱부터 하는 것이 좋다. 구분도 편하게 스페이스 바로 나누면 쉽게 해뒀음 record를 한번 탐색하며 uid에 닉네임을 저장할 딕셔너리를 만들고 파싱한 문자 중에서 enter나 change가 있다면 닉네임을 update해주는 문제 입퇴장 로그를 담아둘 리스트를 하나 만들었고 나중에 순회하며 리터럴 스트링으로 answer을 만들었다. 1. record를 순회하며 파싱하고 2...
각 자리에 앉으면 토크가 늘어나서 어떤 사람이 다른 사람과 재밌게 놀 수 있는 짝을 찾는 문제 토크는 그냥 쉽게 말하면 몸무게 * 시소 중심으로부터의 거리이다. 조건을 보면 weights가 최대 100,000이다.. 이런거 이중 for문으로 완탐돌리면 무조건 시간초과남! 시간복잡도 O(n)인 방법을 찾아야 한다. 그건 바로 몸무게 배열을 만드는 거다. 몸무게는 한정되어 있고 최대 1000까지이니까 몸무게를 index로 갖는 배열 형태로 만들어도 괜찮은 수준이다. 문제는 이렇게 몸무게에 대한 정보를 배열에 매핑(표시)해도 생각해야할 것이 있다. 1. 몸무게 같은 사람들은 nC2의 조합이다. -> 2명인 경우 짝꿍이 될 수 있는 경우의 수는 1. -> 3명인 경우 짝꿍이 될 수 있는 경우의 수는 3. -> ..
입력에 대해 목표값까지 더하거나 나누는 문제 이런 문제는 당장 생각나는 큐를 사용하는 완탐 기반 방법이 두개가 있다. 1. 입력을 목표에 맞춰서 더하거나 곱하는 방법 2. 목표를 입력에 맞춰서 빼거나 나누는 방법 이런 문제는 2번이 적합하다. 1을 +1, *2, *3만을 사용하여 10에 하려면 최단 방법은 여러가지가 있겠지만 우선 *3 *3 +1이 생각난다. 1번으로 접근하면 1에 대해서 3번 연산, 2에 대해서 3번연산, 3에 대해서 3번연산, ... 이렇게 가지만 2번으로 접근하면 10에 대해서 2번 연산(-1, /2), 9에 대해서 2번 연산(-1,/3), 5에 대해서 1번 연산, 8에 대해서 2번 연산, 3에 대해서 2번 연산, 이렇게 진행된다. 즉 연산 횟수 자체가 많이 줄어든다. from co..
배열을 순회하면서 해당 배열의 요소를 기준으로 뒤의 요소들 중 나보다 큰 수를 먼저 만났을 때의 값을 출력하는 문제 조건을 보면 배열의 길이는 10^6이다. 단순하게 for문을 돌리고 해당 인덱스부터 다시 for문으로 검사하는 과정을 하면 시간복잡도는 O(N^2) 논리대로라면 1000000!를 계산해야해서 최악의 조건에서는 시간초과가 날 것이다. 정답을 도출해 내는 과정을 살펴보면 1. 나를 기준으로 뒤의 인덱스에서 나보다 큰 수 중 가장 가까운 수를 찾아내고 2. 있다면 해당 수가 정답이되고 없다면 -1이 된다. 가장 가까운 수를 찾는 것에서 stack을 쓰면 쉽게 할 수 있다는 것을 생각할 수 있다. 1. 스택을 마지막 수를 넣으며 선언하고 순회를 거꾸로 시작 -> 이유는 마지막 수의 정답은 항상 -..