분류 전체보기 70

[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

[백준] 1744. 수 묶기

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 입력을 받을 때 부터 조건문을 이용해 1일 경우는 그냥 answer에 더 해주고, 1보다 클 경우는 gt_arr에, 0과 음수는 lt_arr에 담아준다. 이때 1을 리스트에 넣지 않고 더해주는 이유는 1*n 과 1+n 중에 1+n이 더 크기 때문이다. 1의 경우는 곱셈을 하면 절대 최댓값이 나오지 않는다. 양수일 경우 내림차순으로 정렬, 음수일 경우는 오름차순으로 정렬해준다. 이는 큰 원소들끼리..

알고리즘 2021.09.29

[백준] 12904. A와 B

https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 처음에는 s에서 t로 바꿔주기 위해 모든 경우의 수를 다 살펴보는 방법을 생각했는데, 이는 T의 최대 길이가 1000이므로 시간초과가 날 수 밖에 없는 코드였다. 여기서 생각의 전환이 필요한데, S를 T로 바꾸는 것이 아니라 T를 S로 바꿔준다면 while 문으로 쉽게 끝낼 수 있다. 알고리즘 문제를 풀 때 아이디어가 얼마나 중요한 지 알 수 있는 문제였다. ..

알고리즘 2021.09.28

[백준] 1541. 잃어버린 괄호

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 일단 덧셈을 먼저 다 해준 다음에 빼주면 되니까 '-'를 기준으로 split() 해준다. 리스트의 첫 원소에 숫자만 있을 수도, + 연산자가 같이 있을 수도 있으므로 일단 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에 저장한다. 그 뒤에 똑같이 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에서 계속 빼주면 된다. 처음에는 eval() 함수를 이용해서 ..

알고리즘 2021.09.28

Git Hub 프로필 꾸미기

새 Repository 만들기에서 자신의 GitHub 아이디와 같은 이름의 Repository를 만들어주고, README 파일도 추가해준다. 아래와 같이 'special repository'라는 안내문이 뜬다. 그리고 만들어진 Repository의 README.md 파일을 수정해주면 github 프로필에 수정이 된다. 스탯 추가하기 https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md ![GitHub stats](https://github-readme-stats.vercel.app/api?username=깃허브ID&show_icons=true&theme=테마명) 위의 링크에서 원하는 테마를 선택하고, README.m..

이것저것 2021.09.25

[SWEA] 1949. [모의 SW 역랑테스트] 등산로 조성

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 일단 높은 봉우리들을 먼저 다 찾고, 그 봉우리를 기준으로 DFS 완전 탐색을 돌려주었다. cut 여부와 cnt를 함께 넘겨주며 옆으로 갈 수 있고, cut 한 적이 없으면 최대 cut할 수 있는 만큼 돌려보며 cut 해준다. max_climb(가장 긴 등산로) 를 어떻게 갱신 해줄지 고민했는데 그냥 solve 함수를 호출할 때마다 갱신하는 걸로 했다. solve 안의 if-else 문을 작성할 때 not cut 해준 걸 깜빡하고 그냥 else 로 돌렸다가 답이 안 나와서 뭐가 잘못된 건지 한참 생각했다..(-_-) dy = [0, 0, -1, 1] dx = [1..

알고리즘 2021.09.24

[백준] 1931. 회의실 배정

1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 활동 선택 문제의 일종이다. 종료 시간을 기준으로 정렬해서, 종료 시간이 빠른 것을 선택하는 Greedy 적인 사고로 해결할 수 있다. 종료 시간이 같은 경우는 시작 시간이 빠른 순으로 정렬해주어야 (2,2) (1,2) 순서로 들어온 데이터에도 적용이 가능하다. 처음에는 sort를 두 번 해줬는데 key=lambda x: () 로 튜플 안에 여러 인자를 주면 인자 순서대로 정렬된다. 그 뒤 for문을 돌며 greedy로 해결해주면 된다. import sys input = sys.stdin.readline # 활동 선택 문제 -> 종료시간을 기준으로 정렬 n = int(input..

알고리즘 2021.09.24

[백준] 9935. 문자열 폭발

https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 그냥 완전 탐색으로 풀었더니 당연히 시간초과가 났다. 스택을 생각했다가 어떻게 활용해야 될지 모르겠어서 패스 했는데 알고리즘 분류에도 스택이 있길래 다시 도전했다. 스택으로 한참 생각해보니까... 의외로 쉬워서 당황 ㅋㅋ 스택 수열 풀때랑 비슷..? 하게 일단 스택에 넣고 확인하는 게 답이었다. 일단 스택에 집어 넣은 뒤, 스택의 top과 bomb의 마지막 글자가 같고 스택의 길이가..

알고리즘 2021.09.18