https://school.programmers.co.kr/learn/courses/30/lessons/118669 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 다익스트라를 입맛대로 바꾼문제 그러므로 왕복을 구하는게 아닌 일단 목적지까지 제일 intensity가 낮은 값을 찾는 방법을 찾는다면 그방법고대로 다시 돌아오면 된다. 출발지를 어디서 시작하건 summit을 어디가던 그냥 제일 intensity가 짧은 상태를 유지하는 곳에서 시작하고 도착하면 된다는 문제해결방법이였다. 원래는 최단거리를 구하기 위해 가중치의 합을 비교하는게 다익스트라인데 여기서는..
https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해석 길이가 같은 큐를 두개 준다. 그리고 나서 FIFO 구조로 POP을 하면 맨앞에것이 빠지고 insert를 하면 맨 마지막 인덱스 뒤에 추가가 된다. 그렇게 반복하여 두 큐를 같게 해라!가 문제였다. 그냥 단순하게 생각을 해보았다. 두 큐가 주어지면 각 합을 구한다음에 더 큰 놈에서 앞에꺼를 POP해서 작은놈한테 insert를 해주면서 맞추어 나가는 단계를 진행하면 되지 않을까? 여기서 ..
https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해 MBTI와 같이 각각의 항목들을 검사하면서 어디쪽에 더 가깝니? 하는 문제로서 이해에 어려움은 없었다. 예를들어 survey에 ["AN", "CF", "MJ", "RT", "NA"]이 들어오고 choices에 [5,3,2,7,5]가 들어온다면 순차적으로 5는 약한동의이므로 뒤에 있는것에 +1을 해주고 3은 약한비동의이므로 앞에거에 +1해주고 2는 비동의라 앞에꺼에 +2해주고 T는 매우..
https://www.acmicpc.net/problem/2342 문제를 읽고 먼저 메모리제이션이 떠올랐다. 현재인덱스, 왼발, 오른발을 저장해야하기에 dp배열을 삼차배열로 만들었다. 그리고 만약 한발자국 바뀔때 두가지 case가 있을 수 있다. 왼발이 가거나 오른발이 가거나. 그때 move함수를 통해 에너지가 어느정도 소요되는지를 구하고 기존의 값에서 더해주는 점화식을 세웠다. dp데이터에서 다음인덱스는 기존에서 왼발을 움직였을때랑 오른발움직였을때 각각을 저장해주게 됩니다, dparray를 전부 최대치로 해놓았기 때문에 마지막 인덱스에서 왼발했던거랑 오른발했던거를 비교하여 제일 작은 값으로 출력을 해주게 되면 우리가 찾는 힘을 최소화 하는 방법이 나온다. 더 좋은방법이 있을거라 생각한다. 댓글로 알려주..
https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 1. 문제풀이 문제는 간단하다. 각 줄마다 마감일 + 점수가 주어지는데 하루에 한가지 점수만 얻을 수 있다. 이 중 어떻게 해야 최대 점수를 받을수 있을지를 구하는 문제였다. 크게 두가지로 생각을 하였다. 지금 닥친 것 중에 제일 큰 것들을 해결해주자 vs 제일큰 점수들위주로 sort를 하고 그것들을 위주로 실행을 가능하게 하자. 생각을 해보니 두번째 방법이 문제해결에 맞는 방법이여서 두번째 방법으로 진행을 하였다. 그런데 다시 막힌게 그러..
https://www.acmicpc.net/problem/1644 [1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net](https://www.acmicpc.net/problem/1644) 문제의 이해는 굉장히 쉬운 편이였다. 그냥 하나이상의 연속된 소수의 합으로 해당하는 값을 만들수 있는가? 그리고 만들수 있다면 몇가지 경우가 나오는가였다. 1. 주어진 값 이하에서 나오는 모든 소수들을 리스트로 만든다. 2. 해당하는 소수들을 처음부터 더해주면서 만약 합이 주어진값과 같으면 count해주고 아니면 조금씩 변하게 만들어주자 라는 생각으로 시작을 하였다. 1트 a = int(input()) num = 2 primelist=[] def..
https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 문제를 읽고 두가지가 생각났다. 1. 어디에 바이러스를 심어놔야 제일 빠르게 될까 2. BFS를 이용해 좌우상하로 전염시켜 시간을 구하자. 그래서 바이러스를 놓을 수 있는 모든 조합을 구해준 후 BFS를 통해 시간이 더 최소인 것을 구하기로 했다. BFS함수에서 visited 이차배열로 한번에 감염을 시키면 1씩 이전값에서 증가하도록 count까지 해주었다. 마지막까지 감염시키는데 몇초걸리는지 알기 위해 ..
https://www.acmicpc.net/problem/2143 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 처음에 n개의 숫자가 나오고 m개의 숫자가 나오는데 거기 있는 것들의 합으로 t를 만드는게 목표이다. 이 문제를 보고 뭔가 동전들로 금액맞추기가 떠올랐다. 처음에 Nlist, Mlist를 받으면 거기서 가능한 모든 조합을 정리하고 값들을 dict으로 만들어 주었다. 왜냐하면 시간복잡도가 O(1)이기에 for문을 두번돌..
문제를 해석해보면 각라인에 파티가 있는데 그 중 진실을 아는 사람이 하나라도 있으면 그 파티에서는 지민이는 거짓말쟁이로 판단되어진다. 그래서 생각한것이 Union&find를 떠올렸다. 파티에 잇는 사람들을 노드들로 생각하고 잇고 나서 find를 통해 만약 진실을 아는 사람이 있으면 그 연결한 노드들에서는 거짓말을 하면 안되는 것이다. import sys input = sys.stdin.readline N,M = map(int,input().split()) peoplelist = list(map(int,input().split()))[1:] uplist = [i for i in range(N+1)] for i in peoplelist: uplist[i] = 0 #정답을 아는놈드은 0으로 def Union(..
우리가 생각해야하는것은 1. 가입자를 늘리자. 2. 그중 판매액은 최대로 우선 이모티콘의 최대개수는 7개이고 할인율은 4개이다. 그래서 4의7승의 경우의수가 나오고 인원은 최대 100명이므로 곱해보면 1,600,000대략번의 횟수가 나오기에 완전탐색 가능하다고 생각을 하였다. 그렇다면 중복순열을 일일이 구현해야할까? 라고 의문점이 들었다 왜냐면 파이썬은 앵간한건 구현이 되어있기 때문이다. 찾아보니 product라고 중복순열을 만들어주는 모듈이 있엇다. 그래서 바로 냠냠! 할인율로 조합될수 있는 모든 경우의 수를 구해주고 첫번째의 경우의수부터 끝의 경우의수까지 루프를 돌면서 유저가 가지고 있는 정보들가 비교해서 제일 많이 구독시킬수 있는 경우에서 가장 total_price가 많은 경우를 answer에 갱신..