전체 글

PS/백준

[백준] 14891번 톱니바퀴 (python)

https://www.acmicpc.net/problem/14891 접근 방식문제를 보자마자 연쇄적으로 톱니바퀴가 돌아가니 DFS로 풀어야겠다고 생각했다.근데 이제 돌아가는 방향을 고려해야 했고, 자석의 극성도 확인해야 됐다.. 톱니바퀴가 무조건 연쇄적으로 돌아가는 게 아니기 때문에 고려해야 할 부분이 많았다. 그래서 회전 부분은 left, right 각각 메서드로 분리했다. DFS 부분 풀이는 다음과 같다.우선 한 번 체크한 톱니바퀴는 또 체크하면 안 되기 때문에 (두 번 돌아감) 방문처리를 해주었다. 그래프에서 제일 중요한 방문처리 !!!그러고 왼쪽에 있는 극성과 오른쪽에 있는 극성이 다른지 확인해 주었다. 어차피 톱니바퀴는 4개 있기 때문에 그 개수를 벗어나지 않는 선에서 분기처리 했다.이때 중요한..

PS/백준

[백준] 3190번 뱀 (python)

https://www.acmicpc.net/problem/3190 접근 방식초반에 문제 이해를 완전 잘못해서 오래 헤맸다.. 헤맨 부분은 아래와 같다.예를 들어8 D10 D순으로 방향을 이동하는데, 이게 이 아니라, 이다.즉, 여기서 말하는 10초는 새로운 10초가 아니라 누적된 10초인 것이다.. 그리고, 또 헤맨 부분은예제 2번에서8 D10 D11 D13 L이렇게 이동한다고 한다. 그런데 이때 13초가 지난 후 왼쪽으로 방향을 틀어준 다음 반복문을 끝내버렸다. 마지막으로 방향을 틀어줘도 앞으로 전진할 수 있음에도 불구하고 반복문을 끝내버렸다.그래서 이 부분은 벽에 부딪히거나 자신의 몸에 닿은 경우가 아니면 float('inf')만큼 앞으로 가게 했다. 그러면 언젠가 벽에 부딪히기 때문이다. 만약, 벽..

PS/백준

[백준] 16234번 인구 이동 (python)

https://www.acmicpc.net/problem/16234 접근 방식문제를 보면 인접한 나라들 사이의 인구수를 고려해서 탐색해야 한다고 나와있다. 여기서 그래프 문제라는 것을 파악했다.이후에는 인접한 칸들 간의 인구수를 비교하고, 그게 조건에 부합하면 queue에 넣었다. 이때 주의해야 할 점이 한 번의 탐색이 끝난 후, 방문하지 않은 나라가 있을 경우 그 나라를 시작으로 또 탐색해야 한다. 왜냐면 그 나라를 기준으로 새로운 연합이 만들어질 수 있기 때문이다.(이때 이미 다른 연합에 포함된 나라는 고려하지 않는다.)위 과정을 possible() 메서드와 bfs() 메서드를 엮어서 구현했다. 방문하지 않은 나라가 있을 경우 bfs()로 탐색을 시작하고, 만약 인구 이동이 일어나면 문제의 정답인 c..

CS/네트워크

[네트워크] 1-4. 패킷 교환 네트워크에서의 지연, 손실과 처리율

중요해서 따로 뺐다. 1. 노드 처리 지연패킷 헤더를 조사하고, 그 패킷을 어디로 보낼지 결정하는 시간이다.노드를 처리한 후에는 라우터 A가 해다 패킷을 라우터 B의 입력 링크 큐로 보낸다. 2. 큐잉 지연큐에서 출력 링크로 전송되기를 기다리는 시간이다.먼저 도착한 패킷의 수가 많을수록 해당 지연은 길어진다.큐가 비어있으면 대기할 필요가 없기 때문에 큐잉 지연은 0이다. 3. 전송 지연데이터를 네트워크로 보내는 데 걸리는 시간이다.이는 패킷의 모든 비트를 링크로 밀어내야 하기 때문에 패킷의 길이가 L, 전송률을 R이라 했을 때 L/R 공식을 가진다. 4. 전파 지연신호가 송신 측에서 수신 측으로 전파되는 데 걸리는 시간이다.쉽게 말해서 출력 링크로 나온 패킷이 다음 라우터까지 전파되는 데 걸리는 시간이다..

CS/네트워크

[네트워크] 1. 컴퓨터 네트워크와 인터넷

을 읽으면서 발췌한 내용이다. 전공 수업을 들을 때 읽었는데 중요한 내용이 정말 많이 담겨있어서 한 번 더 읽게 되었다. 세그먼트와 패킷통신 링크는 구리선, 광케이블 등 실제 물리 매체로 구성되며, 각각의 링크들은 다양한 전송률을 이요하여 데이터를 전송한다.이때 한 종단 시스템이 다른 종단 시스템으로 보낼 데이터를 갖고 있을 때, 이 데이터를 세그먼트로 나누고, 각 세그먼트에 헤더를 붙인다. 이렇게 만들어진 정보 패키지가 패킷이다. 패킷 교환기 (스위치)도착한 패킷을 입력 통신 링크로 받아, 출력 통신 링크로 내보낸다.최종 목적지까지 위 방식으로 패킷을 전달한다.ex) 라우터(네트워크 코어), 링크 계층 스위치(접속 네트워크)💡 Cisco라는 회사가 스위치 및 라우터 등 유선 통신장비 분야에서 업계 1..

PS/백준

[백준] 16236번 아기 상어 (python)

https://www.acmicpc.net/problem/162366개월 전에 풀었던 문젠데 한 번 더 풀었다.. 문제만 익숙했고 푸는 방식은 여전히 헷갈렸다. 헷갈렸던 점먹을 수 있는 물고기가 한 마리보다 많으면, 거리가 가장 가까운 물고기를 먹는다.거리가 가까운 물고기 많다면, 가장 위에 있는 물고기, 그러한 물고기도 많다면, 가장 왼쪽에 있는 물고기를 먹는다.사실상 이 조건 때문에 골드 3인 거 같다. 나머지는 보통의 그래프 탐색 문제와 똑같다.  문제 풀이문제에서 주어지는 기본 조건이 많기 때문에 미리 선언해야 한다. 상어의 크기, 상어가 먹은 물고기 개수, 상어의 위치, 총 소요 시간 등 미리 변수로 선언해 줬다. 그리고 처음 상어의 위치를 찾아줬다. 왜냐면 상어의 위치를 기점으로 물고기를 찾아..

PS/백준

[백준] 14503번 로봇 청소기 (python)

https://www.acmicpc.net/problem/14503 BFS로 풀었다.1번 2번 3번을 while True 안에서 차례대로 구현했다.  먼저 현재 칸이 청소되지 않았다면 청소했다. -1이 청소했다는 의미이다. 그리고 상하좌우로 청소가 안된 칸이 있는지 확인했다. 만약 청소가 안된 칸이 한 개라도 있다면 반시계 방향으로 틀고, 한 칸 전진해 줬다.이때 d -= 1을 하면 인덱스를 벗어나기 때문에 반드시 나머지 연산을 해주어야 한다. 만약 청소가 안된 칸이 없다면 (모두 청소되어 있다면) 후진을 하기 위해 방향을 나머지 연산을 해주고, 벽이 아닌 경우 후진했다. 만약 벽인 경우 while문을 탈출하기 위해 break도 작성하였다. ( d - 1 ) % 4 가 반시계 방향 회전인 이유방향 리스트..

PS/백준

[백준] 14502번 연구소 (python)

https://www.acmicpc.net/problem/14502  문제 풀이너비 우선 탐색이랑 완전 탐색이 합쳐진 문제이다. 벽을 세울 수 있는 모든 경우를 만들고, 그 경우로 너비 우선 탐색을 했다. N과 M의 범위가 작기 때문에 시간초과는 안 난다. 제일 어려웠던 건 원본 그래프를 유지하는 부분이었다. 그래프를 바꾸면서 문제를 풀어나가야 하기 때문에 원본 그래프를 유지해야 한다. copy의 deepcopy 메서드를 써서 복사본을 만들고, 원본은 유지하면서 풀었다.  이런 문제는 구현해야 할 기능이 많아 무조건 메서드로 나눠서 푸는 게 편하다.내가 만든 메서드는 아래와 같다.벽을 세우는 메서드바이러스를 퍼트리는 메서드안전한 구역의 개수를 세는 메서드안전한 영역의 최댓값 구하는 메서드도 작성할까 했으..

yo0oni
기록 기록 기록