본문 바로가기

알고리즘103

PCCE 치고나서 느낀 점(멸...망....흑흑) PCCE 후기 방금 PCCE 시험을 치고 왔다. 기출문제랑 모의고사에선 음. 이 정도면 당연히 lv4는 그냥 맞겠군 했는데,,,, 직접 맞닥드리니 아니었다. 우선 캠으로 하다보니, 중간에 뭐가 문제였는진 몰라도 화면 공유와 캠이 제대로 작동을 안 해서, 그것 재설정한다고 시간이 몇 분 빼먹었다. 그리고 디버깅 난이도가 왜 어렵지...? 문제를 읽고 다시 하는데 읽히지도 않고, 읭스럽게 있다가 하나씩 만져보다가 고치고 그랬다. func 집어넣는 문제는 내가 생각한 대로 안풀려서 제출도 못했다. 위에 내용들 때문에 시간 관리 잘 못해서, 마지막 직접 푸는 문제에서 15분 동안 2문제를 풀게 생겼는데, 1문제는 금방 풀었다지만, 나머지 1문제는... 분명! 다 풀!었!는!데! 답이 계속 이상하게 나왔다. 내 .. 2024. 2. 18.
프로그래머스 Lv2 하노이의 탑 (python) 하노이의 탑 풀이 재귀로 풀어야 된다는 것도 알고 있었고, 이전 홀수나 짝수에 쓰였던 값이 다음 홀수, 짝수 값에서 재사용된 다는 것도 알고 있었지만, 어떻게 구현을 해야 하는지 계속 골골대다가 결국은 힌트를 보고 풀었다. 아직 내 머리는 이런 알고리즘들을 제대로 구현해내는 것이 불가능한가... 더 빨리 성장시켜서 예전에 이 정도는 껌으로 풀던 시절로 돌아가야지. 내 기존 풀이법은 완전탐색처럼 하는 방법이었으나, 그러니까 재귀함수가 너무 깊이 들어가서 실패를 계속했다. 그러다 보니 내가 바라보던 풀이 방식에서는 풀리지가 않았다. 그래서 힌트를 찾아보니 아래처럼 풀어야하는 것이 정석인 듯했다. 후.... 코드가 엄청 짧은 것을 보니 아직 내 실력은 한참이군.. 흑 잘 키우던 캐릭터가 사망하고 1 레벨부터 .. 2024. 2. 17.
python으로 로또 번호 뽑기 이 글을 작성하는 시점은 토요일 오후 시간이다. 점심 즈음에 '토요일이니까 로또 사야지' 하는 생각을 하다가, 로또 번호를 내가 그냥 하는 것보단, 개발자스럽게 코옴퓨타께서 점지해 주시는 번호로 로또를 구매하는 것이 좋지 않을까라는 생각이 들었다. 그래서 일단 로또와 관련된 api가 있는지 확인해봤다. 오 있다. 로또 API https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=회차번호 위 주소로 들어가서 회차번호에 지금까지 있었던 회차번호를 입력하면 관련한 숫자가 입력된 정보값을 json으로 받을 수 있다. 아래처럼 나온다. { "totSellamnt": 126617296000, "returnValue": "success", "drwNoD.. 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.