qwlake's Blog

어서오세요, 반갑습니다 :)

백준 4963번 - 섬의 개수

https://www.acmicpc.net/problem/4963 이 문제를 풀었을 때가 알고리즘 공부를 막 시작했을때라 코드가 많이 더럽다. 지금 보니 불필요한 부분도 많이 보인다. 그 때 헤매었던 부분 중 하나는 메모리 초과다. 섬을 탐색할 때 재귀를 사용했는데, 이미 탐색한 섬을 체크하는 부분이 재귀를 들어가기 전이 아니고 들어가고 나서 ...

백준 2816번 - 디지털 티비

https://www.acmicpc.net/problem/2816 이 문제는 스페셜저지다. KBS1, KBS2 를 제외한 나머지 채널들의 순서가 상관 없고, 최소한 움직임 개수를 구하라고 한 것도 아니니(아마도?) 여러 가지의 답이 나올 수 있다. 나는 KBS1과 KBS2의 순번(인덱스)을 저장해서 해당 순번만큼 화살표를 아래로 움직이고(리모컨...

백준 2669번 - 직사각형 네개의 합집합의 면적 구하기

https://www.acmicpc.net/problem/2669 그냥 간단하게 2차배열을 만들고 전부 0으로 채운다. 입력으로 직사각형의 좌표가 들어오면, 좌표 안에 해당하는 2차배열의 칸들을 1로 채운다. 전부 채우고 1의 개수를 구하면 이것이 답이다. 파이썬 코드 1 2 3 4 5 6 7 8 9 10 11 import sys a = [[...

백준 2668번 - 숫자고르기

https://www.acmicpc.net/problem/2668 이 문제에서는 유연하게 집합(set)을 활용할 수 있는 파이썬이 좋은 것 같다. 나는 숫자와 지금까지 합한 숫자들의 길이를 한꺼번에 집합에 넣어서 깊이우선탐색을 돌렸다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import sys N =...

백준 2660번 - 회장뽑기

https://www.acmicpc.net/problem/2660 너비우선탐색으로 모든 회원들의 관계를 파악한다. 관계의 친밀도를 저장하는 2차 배열을 두고 각각의 인덱스가 회원의 번호를 나타내게 하여 인덱스를 이용해 회원들의 친밀도를 한 번에 볼 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2...

백준 2636번 - 치즈

https://www.acmicpc.net/problem/2636 처음에는 치즈 안쪽에서 탐색해서 바깥쪽의 치즈만 녹이는 방식으로 접근하려 했다. 그런데 그렇게 하면 치즈 안의 기포가 있는 부분은 녹지 않아야 하는데 내 방식대로 하면 녹게 된다. 따라서 치즈가 없는 부분을 탐색하다가 공기와 맞닿아 있는 부분의 치즈만 녹인다. 이렇게 하면 치즈 ...

백준 2628번 - 종이자르기

https://www.acmicpc.net/problem/2628 아주 간단하다. 세로로 잘라야 하는 배열과 가로로 잘라야 하는 배열을 두고 입력을 받아 각각 채운다. 그 다음 이 두 배열(a,b 배열)을 정렬시킨 후에 넓이를 구해 비교하면 된다. 넓이를 구해 비교하는 부분을 자세히 설명해 보겠다. 넓이를 구하기 위해서는 잘려진 종이의 1.가...

백준 2659번 - 십자카드 문제

https://www.acmicpc.net/problem/2659 먼저 입력받은 숫자를 시계수로 만들고, 이보다 작은 시계수의 개수를 구하는 방법으로 풀었다. 지금 보니 이게 최선의 알고리즘인가 싶다. 무엇보다 1 t = str(i)+str(j)+str(k)+str(l) 이 문장이 마음에 안 드는데, 이는 f스트링을 사용해서 메모리를 더 적...

백준 2643번 - 색종이 올려 놓기

https://www.acmicpc.net/problem/2643 일단 먼저 파이썬으로 짠 코드를 보자. (정답코드이다) 아주 간단하다. 1 2 3 4 5 6 7 8 9 10 11 import sys n = int(input()) a = [sorted(list(map(int, sys.stdin.readline().split(" ")))) for ...

백준 2642번 - 전개도

처음에는 어떻게 접근해야할 지 몰랐지만 알고보니 간단했다. 우선 목표에 도달하기 위해서는 두 가지를 주목해야 한다. 모든 면은 하나의 면만 마주보아야 한다. 1번이 만족하면 숫자 1이 마주보는 면을 찾아야 한다. 따라서 각각의 면이 어떠한 면을 마주보는지 알면 2번은 자연스럽게 해결된다. 각 면이 어떤 면...