본문 바로가기

Algorithm36

[Softeer / Level2] 지도 자동 구축 https://www.softeer.ai/practice/info.do?idx=1&eid=413 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 www.softeer.ai 전체 격자의 갯수가 4 -> 9 -> 25 ... 제곱으로 늘어나서 격자점의 갯수만 알면 해결할 수 있다. 점화식의 규칙만 알아내면 되는데, 내가 생각했을 때 (이전 격자 갯수 + 올림(이전 격자 갯수 / 2)) 하면 될 줄 알았는데 아니였다.. 해답풀이는 아래처럼 (이전격자 + 2 ^ (i - 1)) 로 구성된다. 1단계 : (2+1) ^ 2 2단계 : (3+2) ^ 2 3단계 : (5+4) ^ 2 4단계 : (9+8) ^ 2 ... import sys N = int(sys.stdin.readline()) S = [0.. 2023. 10. 4.
[Softeer / Level2] 장애물 인식 프로그램 https://www.softeer.ai/practice/info.do?idx=1&eid=409 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 www.softeer.ai 문제를 보자마자 백준문제(2667번 / 단지번호 붙이기) 에서 풀었던 문제가 떠올랐다. 동일한 문제여서 쉽게 해결할 수 있었다. 복기해야하는 점은 격자 벗어나는 부분(종료조건) 또는 0이면 False 리턴 방문을 했으면 방문표시 (1 -> 0)으로 표시하여 탐색한곳 다시 탐색하지 않도록 방지 문제 조건에 맞게 정렬을 한다. import sys def dfs(S, x, y): global cnt if x = N or y = N: return False if S[x][y] == '1': cnt += 1 S[x][y] = '.. 2023. 10. 3.
[Softeer / Level2] 8단 변속기 https://www.softeer.ai/practice/info.do?idx=1&eid=408 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 www.softeer.ai 간단한 리스트 비교문제이다. 조건에 알맞게 문자열을 출력해주면 끝 import sys input = sys.stdin.readline S = list(map(int, input().split())) if S == [1, 2, 3, 4, 5, 6, 7, 8]: print("ascending") elif S == [8, 7, 6, 5, 4, 3, 2, 1]: print("descending") else: print("mixed") 2023. 10. 2.
[Softeer / Level2] 금고털이 https://www.softeer.ai/practice/info.do?idx=1&eid=395 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 www.softeer.ai 분할 가능한 knapsack 문제이다. 분할이 불가능한 경우면 dp로 풀어야 하는데, 그렇지 않다면 그리디로 해결한다. 밸류값을 기준으로 소팅하고 제한된 W에 알맞게 가져가도록 코드를 구성했다. import sys total_weight = 0 total_value = 0 W, N = map(int, input().split()) S = [] for i in range(N): a, b = map(int, input().split()) S.append((a, b)) S.sort(key=lambda x: -x[1]) for.. 2023. 10. 1.
[구름톤 챌린지] Day4 이진수 정렬 람다함수가 생각이 안나서 애먹은 문제였다.. sorted 에서는 정렬된 iterator 자체를 반환해주는 걸로 알고있어서 내부적으로 람다함수를 사용할 수 있다고 알고있다. 문제 그대로 따라가면 1. 2진수 '1' 개수를 기준으로 내림차수해준다음에 2. 개수가 같을 때 10진수 내림차순으로 정렬해주면 된다. (SQL order by 부분이랑 상당히 생김새가 많이 닮았다고 생각했다.) 그리고, 더 고통받았던건 lambda 보다 더 자주 쓰지않은 bin 함수였었다. 1. 인자가 num(10진수) 가 들어간다는 점과 2. 리턴해준 문자열에서 '0b' 라는 접두사가 존재하는 것 위의 두가지가 해결된 이후 count('1') 을 통해 1의 개수를 쉽게 가져올 수 있었다. 위의 조건대로된 sorted가 리턴이 되었다.. 2023. 8. 20.
[구름톤 챌린지] Day3 완벽한 햄버거 만들기 N = int(input()) S = list(map(int, input().split())) get_max_idx = S.index(max(S)) for i in range(get_max_idx): if S[get_max_idx - (i + 1)] > S[get_max_idx - i]: print(0) exit() for j in range(len(S) - get_max_idx - 1): if S[get_max_idx + j] < S[get_max_idx + (j + 1)]: print(0) exit() print(sum(S)) 단순 구현 문제이지만 반복을 어디까지 돌릴것인가에 대한 골치아픈 반복문이 등장한 문제였다. 처음에는 3개씩 묶어서 앞뒤 반복해서 찾아가면 되지않을까 생각을 했었지만 도루묵이였다.. 2023. 8. 20.
반응형