본문 바로가기

알고리즘 문제408

[Programmers] 가장 먼 노드 문제 : https://programmers.co.kr/learn/courses/30/lessons/49189 bfs로 풀 수 있다. bfs를 돌면서 현재 노드, 1번 노드와의 거리를 저장한다. 만약 노드와의 거리가 갱신되면 정답 변수를 0으로 갱신한다. 노드를 탐색할때 정답변수에 1을 더한다. 시간복잡도는 O(V + E). V = 정점개수, E = 간선개수 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/programmers/Graph/%EA%B0%80%EC%9E%A5%20%EB%A8%BC%20%EB%85%B8%EB%93%9C.cpp 2021. 6. 9.
[Programmers] N으로 표현 문제 : https://programmers.co.kr/learn/courses/30/lessons/42895 DP 관련 문제이니 DP로 풀어야겠는데 number를 인덱스로 dp 배열을 만드려고하니 막막하다. 막힐때는 제한사항을 보면서 문제 제작자의 의도를 파악해보자. 제한사항 1. 1 2021. 6. 8.
[Programmers] 다단계 칫솔 판매 문제 : https://programmers.co.kr/learn/courses/30/lessons/77486 추천인을 저장하는 parentMap(key = 판매원, value = 추천인)과 총 이익을 저장하는 priceMap(key = 판매원, value = 이익)을 만든다. enroll, referral 을 탐색하며 parentMap을 세팅한다. seller, amount 배열을 탐색하며 priceMap 을 세팅해보자. 얻은 이익은 칫솔가격이 100이므로 amount[i] * 100이다. 이익의 10프로를 제외한 가격을 자신한테 더하고 10프로는 추천인한테 배분한다. 만약 parentMap[탐색중인 판매원] value가 "-"가 아닌 경우 이익의 분배를 다시 해야하므로 parentMap[탐색중인 판매.. 2021. 6. 1.
[Programmers] 행렬 테두리 회전하기 문제 : https://programmers.co.kr/learn/courses/30/lessons/77485 1부터 차례대로 세팅된 rows x columns 크기의 배열(let, array)을 먼저 만든다. 이제 행렬을 직접회전하면서 최소값을 저장한다. x1 < x2, y1 < y2 이므로 배열크기를 벗어날 걱정없이 시작 이전 변수(let, before)은 array[x1+1][y1]으로 세팅한다. 회전은 위 순서대로 회전시킨다. 먼저 행을 x1으로 고정시킨 뒤 탐색하는 배열에 before값을 넣고 갱신되기 이전값으로 before 변수를 갱신한다. 다음은 열을 y2로 고정시킨 뒤 탐색하면서 배열값을 갱신시킨다. 이 때, 중복해서 값을 갱신시키면 안되므로 (x1, y2)는 갱신대상에서 제거시켜야 한다... 2021. 5. 31.
[Programmers] 로또의 최고 순위와 최저 순위 문제 : https://programmers.co.kr/learn/courses/30/lessons/77484 lottos 문자열에서 0인 개수를 wrongCnt 변수에 저장하고 0이 아닌 수들 중 로또번호에 포함되는 수의 개수를 matchCnt 변수에 저장한다. 최고등수가 되는 경우는 알수없는 번호(0인 수들)들이 모두 로또 당첨번호인 경우이다. 즉, matchCnt + wrongCnt 가 당첨번호의 개수인 등수를 구하면 된다. 최저등수가 되는 경우는 알수없는 번호들이 모두 로또 당첨번호가 아닌 경우이다. 즉, matchCnt가 당첨번호의 개수인 등수를 구하면 된다. 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/programmers/Dev-matc.. 2021. 5. 31.
[programmers][월간 코드 챌린지 시즌2] 2개 이하로 다른 비트 문제 : https://programmers.co.kr/learn/courses/30/lessons/77885 xxxx0 -> xxxx1 만약 마지막 비트가 위와 같이 0 이라면 마지막 비트만 1로 바꾸면 정답을 구할 수 있다. 마지막 비트가 0인경우는 짝수인 수이므로 numbers[i]가 짝수인 경우 + 1이 정답이된다. 문제는 마지막 비트가 1인 홀수인 경우이다. 1000111 를 예로 들어보자. 홀수인경우는 0인 비트 중 최하위 비트를 찾는다. 위 경우엔 8에 해당하는 오른쪽에서 4번째 비트가 이에 속한다. 정답이 되는 비트는 1001011 이다. 즉, 0인 비트중 최하위비트는 1로 바꾸고 그 다음 비트는 0으로 바꿔주면 정답을 구할 수 있다. numbers[i]보다는 커야하고(조건 1) 최대 2개.. 2021. 5. 15.