본문 바로가기

Algorithm272

[ 파이썬(python) ] 코드업 4503 - 바이러스(BFS) 📌 코드업 4503 - 바이러스(BFS) 문제 설명 💡 나의 풀이 어제 풀었던 문제를 BFS로 풀어봤다. DFS는 한 노드에서 인접 노드가 더 없을 때까지 끝까지 파고 들어가는데, BFS는 한 노드에서 인접노드가 없으면 주변 인접 노드를 찾는다. BFS는 Queue를 이용해서 풀면 되는데, 어제처럼 flag, check형식으로 풀어보자. BFS방식의 전체적인 흐름은 다음과 같다.(Queue는 선입선출임을 기억하자.) 시작하는 값을 Queue에 넣고 방문처리를 한다. Queue안에 현재 들어있는 값(노드)을 뺀다. 해당 노드의 인접한 노드 중에서 아직 방문하지 않은 노드를 모두 큐에 넣는다. 2~3번의 과정을 더 이상 할 수 없을 때까지 반복한다. Flag, Check방식은 다음과 같다. Flag C와 동.. 2021. 4. 15.
[ 파이썬(python) ] 코드업 4503 - 바이러스(DFS) 📌 코드업 4503 - 바이러스 문제 설명 💡 나의 풀이 이 문제의 다양한 풀이가 있겠지만, 우선 DFS로 풀어봤다. 내일은 BFS로 풀어 볼 예정이다. 비 선형자료구조인 그래프에서의 가장 중요한 부분은 선형 자료구조와 다르게 입력을 받을때 양방향으로 받아야 한다는 점이다. 이번 문제에서 입력값을 어떻게 받아야 하는지 조금 헷갈렸는데, 양방향으로 받으면 정상적으로 정답 판정을 받을 수 있다. 네트워크에 연결되어있는 컴퓨터만 바이러스에 걸린다고 했으므로 DFS를 통해 나온값들의 len을 구하면 된다. 또, DFS를 푸는 방법에는 2가지가 있는데 다음과 같다. 이코테에서 배운 방법: Flag: if not visited[i] visited를 모두 [False]로 초기화해두고 현재 방문하려는 값이 False이.. 2021. 4. 14.
[ 파이썬(python) ] 백준 13458 - 시험감독 📌 백준 13458 - 시험감독 문제 설명 💡 나의 풀이 문제가 생각보다 쉬워보는데?라고 했다가 정답률이 왜 25%인지 느낌이 왔다. 나는 이중 반복문으로 작성했고, 계산할 때마다 cnt가 1씩 증가하여 총 몇 명이 필요할까?를 계산했는데, 시간 초과판정이 났다. 😂 😂 이중반복문으로 풀려고 했다면 다른 방법을 생각해보자. student를 한 명씩 가져온다. 모든 시험장에 들어가야 하는 총감독관은 1명만 사용하고 부 감독관은 여러 명 사용해도 된다. 먼저, student에서 총감독관이 감시할 수 있는 응시자의 수를 모두 뺀다. 남은 응시자의 수에서 부감독관이 감시할 수 있는 응시자의 수로 나눈 몫을 사용한다. 이때, 나머지가 있으면 몫 +1, 나머지가 없으면 몫을 그대로 사용한다. 여기서 몫은 응시생들을.. 2021. 4. 14.
[ 파이썬(python) ] 프로그래머스 level1 - 소수만들기 📌 소수 만들기 문제 설명 💡 나의 풀이 풀이 방법은 다음과 같다. nums에 있는 숫자들 중 서로 다른 3개를 고른다: combination(3, nums) 각각의 combination을 모두 더한 후 소수 판별 과정을 거친다. 소수가 맞으면 cnt +=1 반복문이 끝나면 return cnt 처음에 break를 사용해야 할지, continue를 사용해야할지 헷갈렸다. 결론적으로 sum(i)를 j로 나눌 때 한 번이라도 0으로 나누어 떨어지는 값이 나오면 해당 반복문을 더 이상 실행하지 않아야 다음 sum(i)로 넘어가기 때문에 break를 사용했다. continue를 사용하면 다음 sum(i)값을 불러오는 것이 아닌, 다음 j값을 불러오게 된다. 여기서 중요한 문법은 for - else문법인데, j가 .. 2021. 4. 12.
[ 파이썬(python) ] 프로그래머스 level1 - 실패율 📌 실패율 문제 설명 💡 나의 풀이 처음 문제를 풀면서 다음과 같은 방법을 떠올렸다. 반복문이 진행될 때마다 전체 len의 값이 count만큼 줄어들어야 하므로 stages를 sort해주고 pop으로 i값을 빼주기: 실패 이중 반복문을 사용해서 첫 번째 순서를 제외한 나머지 순서는 다음과 같이 선언하기 arr.count(i) / len(arr) - 이전 count(i): 실패 이전 count로 반복문이 끝나기 전에 전체 len을 빼주기: 성공 결과적으로 3번째 방법으로 풀어서 맞았는데, 1번과 2번 방법으로 1시간 넘게 고민하다가 기운이 다 빠져버렸다. 😅 😅 또, 반례를 생각하지 않아서 1, 6, 7, 9, 13, 23, 24, 25번 테스트케이스에서 오답 판정을 받았다. 혹시라도 저 테스트케이스에서 .. 2021. 4. 12.