본문 바로가기

알고리즘99

PCCE 치고나서 느낀 점(멸...망....흑흑) PCCE 후기 방금 PCCE 시험을 치고 왔다. 기출문제랑 모의고사에선 음. 이 정도면 당연히 lv4는 그냥 맞겠군 했는데,,,, 직접 맞닥드리니 아니었다. 우선 캠으로 하다보니, 중간에 뭐가 문제였는진 몰라도 화면 공유와 캠이 제대로 작동을 안 해서, 그것 재설정한다고 시간이 몇 분 빼먹었다. 그리고 디버깅 난이도가 왜 어렵지...? 문제를 읽고 다시 하는데 읽히지도 않고, 읭스럽게 있다가 하나씩 만져보다가 고치고 그랬다. func 집어넣는 문제는 내가 생각한 대로 안풀려서 제출도 못했다. 위에 내용들 때문에 시간 관리 잘 못해서, 마지막 직접 푸는 문제에서 15분 동안 2문제를 풀게 생겼는데, 1문제는 금방 풀었다지만, 나머지 1문제는... 분명! 다 풀!었!는!데! 답이 계속 이상하게 나왔다. 내 .. 2024. 2. 18.
프로그래머스 Lv2 하노이의 탑 (python) 하노이의 탑 풀이 재귀로 풀어야 된다는 것도 알고 있었고, 이전 홀수나 짝수에 쓰였던 값이 다음 홀수, 짝수 값에서 재사용된 다는 것도 알고 있었지만, 어떻게 구현을 해야 하는지 계속 골골대다가 결국은 힌트를 보고 풀었다. 아직 내 머리는 이런 알고리즘들을 제대로 구현해내는 것이 불가능한가... 더 빨리 성장시켜서 예전에 이 정도는 껌으로 풀던 시절로 돌아가야지. 내 기존 풀이법은 완전탐색처럼 하는 방법이었으나, 그러니까 재귀함수가 너무 깊이 들어가서 실패를 계속했다. 그러다 보니 내가 바라보던 풀이 방식에서는 풀리지가 않았다. 그래서 힌트를 찾아보니 아래처럼 풀어야하는 것이 정석인 듯했다. 후.... 코드가 엄청 짧은 것을 보니 아직 내 실력은 한참이군.. 흑 잘 키우던 캐릭터가 사망하고 1 레벨부터 .. 2024. 2. 17.
프로그래머스 Lv2 전력망을 둘로 나누기 (python) 전력망을 둘로 나누기 풀이 사실 어떻게 풀어야 하는지 도저히 감이 안 와서 결국 남의 힘을 빌렸다. 처음에는 일단 행렬을 만들고 dfs나 bfs로 풀어야 한다는 것은 알았지만, 구현을 어떻게 해야 하는지 답이 안 나와서 힘을 빌려 아래처럼 제출했다. def solution(n, wires): # 각 송전탑을 연결하는 인접 리스트 생성 graph = [[] for _ in range(n+1)] for a, b in wires: graph[a].append(b) graph[b].append(a) # 각 송전탑에 연결된 예하 송전탑의 노드 수를 계산 count = [0] * (n+1) def dfs(node, parent): for child in graph[node]: if child != parent: d.. 2024. 2. 16.
프로그래머스 Lv2 연속 부분 수열 합의 개수 (python) 연속 부분 수열 합의 개수 풀이 푸는 것은 어떻게 풀면되겠다는 생각은 들었지만, 맨 끝 인덱스에서 다음 인덱스로 넘어가는 과정에 대해서 고민하는데 시간이 오래 걸렸다. 아래의 코드를 추가하려고 머리를 잠깐 굴렸기 때문이다. 이게 맞나?? 하고 말이다. if j+i > N: sum_value += sum(elements[j:]) sum_value += sum(elements[:i+j-N]) for 문을 2개를 사용하면서 슬라이싱과 같이 사용했다. 첫번째 for문은 연속하는 갯수인 1~N개에 대해서 두번쨰 for문은 연속하는 갯수에 해당하는 만큼의 합을 구하기 위한 반복문으로 사용했다. 아래처럼 풀이했다. def solution(elements): answer = [] N = len(elements) # 연.. 2024. 2. 15.
프로그래머스 Lv2 가장 큰 수 도움말 (python) 가장 큰 수 풀이 어째 풀지 계속하다가 풀었다. 근데 하나가 계속 틀려서 보니 질문하기에서 테스트 케이스 한 개를 던져줘서 다행히 풀었다. [0,0,0] 이면 "0" 이 나와야하는데 아무래도 "000"을 출력해서 그런가 보다. 그래서 모든 숫자가 0일 때 0을 반환하게 해 주었다. def solution(numbers): # 모든 숫자가 0인지 확인 if all(num == 0 for num in numbers): return "0" # 문자열로 변환 numbers = list(map(str, numbers)) # 두 숫자를 이어붙였을 때 큰 수가 되도록 정렬 numbers.sort(key=lambda x: x*3, reverse=True) answer = ''.join(numbers) return an.. 2024. 2. 15.
백준 실버4 18110.solved.ac (python) solved.ac 풀이 풀었는데 계속해서 무슨 문제가 있어서 틀렸습니다. 가 나오는지 몰라서 이것저것 해보다가 2 1 4 를 넣어보니 3이 아닌 2가 나오는 것을 보고, 아... round에서 문제가 생겼구나 싶어서 round함수를 내 입맛에 맞게 바꿔주고 아래처럼 풀었다. # 어떤 문제의 난이도는 그 문제를 푼 사람들이 제출한 난이도 의견을 바탕으로 결정 # 아직 아무의견이 없다면 문제의 난이도는 0으로 결정 # 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정 # 절사평균 가장 큰 값과 가장 작은 값들을 제외하고 평균 # 고로 30% 절사 평균은 위에서 15%, 아래에서 15%를 제외하고 평균을 계산 # 제외 해야할 사람이 소수일경우 반올림한다. # 평균도.. 2024. 2. 14.