SWEA 9

[SWEA] 2112. 보호 필름

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 재귀를 이용한 조합으로 풀었다. 해당 행을 모두 0으로 바꾸고 재귀를 타고 들어가거나, 1로 바꾸고 재귀를 타고 들어가거나 원상 복귀 시키고(아무것도 하지 않고) 다음 행으로 넘어가는 식으로 풀면 된다. 처음에는 원상복귀 시키고 또 재귀를 타고 들어갔는데, 굳이 그렇게 해주지 않아도 for 문을 돌기 때문에 원상복귀한 상태 (아무것도 하지 않은 상태)로 다음 행으로 넘어간다. 이는 상태 트리를 그려..

알고리즘 2021.10.17

[SWEA] 1249. 보급로

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 출발지부터 상하좌우 순서대로 탐방하며 각 정점으로 향하는 최단 거리를 갱신하면 되는 문제이다. 출발지를 중심으로 연결된 모든 점을 탐색하므로 DFS를 이용하였으며, 중간에 최단 거리가 갱신되어 큐에 저장된 정보를 이용할 필요가 없으면 (해당 정점을 거치는 것이 최단 거리가 아니라면) 다음 정점으로 넘어가 최단 거리를 계속 갱신하면 된다. from collections import deque dy =..

알고리즘 2021.10.17

[SWEA] 7465. 창용 마을 무리의 개수 (bfs, union-find)

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 간단한 union-find를 이용해 푸는 방법과, bfs를 이용해 푸는 방법 두 가지가 있다. 1. union-find 부모를 자기 자신으로 초기화한 부모리스트를 먼저 생성한 뒤, p1 p2를 받을 때마다 부모를 찾고, 이들을 합쳐주는 (부모를 갱신) 하는 작업을 진행한다. 모든 input을 받은 뒤, 부모 리스트를 돌며 본인이 부모인 경우만 ans +를 해준다. def find_p(x): if x..

알고리즘 2021.10.15

[SWEA] 2814. 최장 경로

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GOPPaAeMDFAXB SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com cycle이 존재하는 그래프의 DFS 탐색 문제이다. 한 정점의 탐색이 끝나면 visited 배열을 다시 0(방문 하지 않음)으로 바꿔주어야 하는 것이 포인트이다. 위와 같이 cycle이 있는 그래프가 있을 때 아래부터 일단 탐색을 한다고 친다. 우하단의 정점부터 시작해서 오른쪽 정점들을 계속 방문하며 방문 표시를 해준다. 더이상 방문할 점이 없기 때문에 다시 첫 정점으로 돌아간다. 새롭게 탐색을 ..

알고리즘 2021.10.14

[SWEA] 5656. 벽돌 깨기

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 작년에 이 문제를 봤을 때는 못 풀고 넘어갔는데 이번에는 1시간도 안 걸려서 풀었다! 최적화는 제대로 못하긴 했지만.. 모든 기능을 여러 함수로 쪼개 구현해서 overhead가 심하고 메모리 사용이 많다. 풀었다는 것.... 성장했다는 것에 의의를 두는 문제.. deepcopy 없어도 풀 수 있을 것 같긴한데 나중에 더 생각해 봐야겠다. solve() 함수는 구슬을 쏘는 모든 경우의 수를 재귀로 탐..

알고리즘 2021.10.12

[SWEA] 2105. 디저트 카페

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu#;return%20false; SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 일단은 까만색으로 표시한 사각형을 돌 때, 시계방향으로 돌든 시계 반대방향으로 돌든 답은 똑같다. 따라서 방향은 무조건 하나로 고정시키고 돈다. 방향을 전하기 전에 짚고 넘어가야 할 것이 있는데, 위 그림의 사각형은 네 꼭짓점 모두에서 만들 수 있기 때문에 중복이 생길 수 있게 된다. 이를 방지하기 위해서 위에서 아래로 차례대로 탐색하며, 순회하는 순서도 하나로 정해주..

알고리즘 2021.10.12

[SWEA] 1248. 공통 조상

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15PTkqAPYCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 트리 자료를 저장하는 방법에 따라 쉽게 풀릴 수도, 아닐 수도 있는 문제였다. 나는 처음에 딕셔너리로 부모 : [자식1, 자식2] 을 받아줬는데 공통 조상을 찾을 때 코드 구현이 난감했다. 떠오른 것은 리스트에 [부모, 자식1, 자식2] 으로 받아주는 것과 클래스를 만들어주는 건데 리스트가 더 편할 것 같아서 이렇게 구현했다. 부모 찾기, 가장 가까운 공통 부모 찾기, sub_tree 개수 찾기 모..

알고리즘 2021.09.30

[SWEA] 1240. 단순 2진 암호코드

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 암호들을 보면 맨 뒤가 모두 1로 시작하는 것을 알 수 있다. 따라서 탐색을 할 때도 행의 맨 뒤부터 보며 1이 나타나는지를 확인한다. 1이 나오면 거기부터 56개가 암호이므로 my_code 변수에 저장하고 break 해준다. my_code 에서 7개씩 잘라 my_dict 안에 있는 암호와 비교해서 변환 시켜주고 odd는 odd끼리, even은 even끼리 더해준다. 최종 계산 결과가 10의 배수일..

알고리즘 2021.09.29

[SWEA] 1218. 괄호 짝짓기

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 처음에는 if-else의 지옥같은 코드를 짰는데... 다른 스터디원의 아이디어로 획기적으로 깔끔한 코드를 짤 수 있었다. 자료구조를 적재적소에 활용하는 감각을 제대로 익히고 싶다. 아무튼 괄호 짝은 if-else 말고 딕셔너리로 깔끔하게 짤 수 있다는 사실을 알게 되었다. from collections import deque exp = {'[':']', '{':'}', '(':')', ''} for tc in range(1, 11): answer = 1 _ = int(input()) q = deque() gwal = input() for g in gwal: if ..

알고리즘 2021.09.16
1