본문 바로가기

CODE/Python11

백준 1991 트리 순회 본격적으로 코딩 테스트를 준비하면서, 자료구조와 트리에 대해서 공부하고 있다. 트리의 경우는 원리는 이해하고 있었지만 코드로 구현하는데 어려움을 느꼈던 부분이다. Python에서는 class로 객체지향 프로그래밍을 구현할 수 있다. 트리 순회 코드를 구현하는데 이 방법 외의 방법을 사용해도 되지만, 코딩 테스트를 보는 회사들의 취지를 고려한다면 객체지향에 맞게 구현하는 것이 좋을 것 같다. class Node: def __init__(self, item, left, right): self.item = item self.left = left self.right = right pre_array = [] in_array = [] post_array = [] def preorder(node): # 전위 순회 p.. 2022. 5. 7.
이코테 상하좌우 문제 여행가 A는 N * N 크기의 정사각형 공간 위에 서 있습니다. 이 공간은 1 * 1 크기의 정사각형으로 나눠져 있습니다. 가장 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당합니다. 여행가는 상-하-좌-우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)입니다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 있습니다. L : 왼쪽으로 한 칸 이동 R : 오른쪽으로 한 칸 이동 U : 위로 한 칸 이동 D : 아래로 한 칸 이동 이때 여행가 A가 N * N 크기의 정사각형 공간을 벗어나는 움직임은 무시됩니다. 예를 들어 (1,1)의 위에서 L 혹은 U를 만나면 무시됩니다. 모범 답안 n = int(input()) plans = list(map(str, in.. 2022. 4. 24.
프로그래머스 프린터 Python def solution(priorities, location): answer = 0 realLocation = [] ## 중요도 인쇄순서 sortPrint = list(range(len(priorities))) ## [1] = A, [2] = B... while len(priorities) > 0: if priorities[0] < max(priorities): ## 우선순위가 밀린다면 priorities.append(priorities[0]) del priorities[0] sortPrint.append(sortPrint[0]) del sortPrint[0] elif priorities[0] == max(priorities): del priorities[0] realLocation.append(sort.. 2021. 12. 16.
프로그래머스 2주차 Python def solution(scores): answer = '' myscores = [] myscoresDummy = [] for ary1 in range(len(scores[0])): ## 00, 10, 20, 30, 40 // 01, 11, 21, 31, 41 for ary2 in range(len(scores[0])): myscoresDummy.append(scores[ary2][ary1]) maxMyscores = max(myscoresDummy) minMyscores = min(myscoresDummy) if (myscoresDummy[ary1] == maxMyscores and myscoresDummy.count(maxMyscores) == 1) or (myscoresDummy[ary1] == m.. 2021. 8. 30.
프로그래머스 완주하지 못한 선수 Python 정답은 정답인데, 효율성에서 점수를 제대로 못 얻고 있다. 검색을 통해 입력된 값을 sort하면 시간 단축이 이뤄진다고 해서 시도했지만, 일부 케이스만 만족하고 모든 케이스의 효율성을 만족하지 못하고 있다. def solution(participant, completion): participant.sort() completion.sort() answer = '' for k in range(len(completion)): if completion[k] in participant: participant.remove(completion[k]) answer = participant.pop() return answer * https://programmers.co.kr/learn/courses/30/lessons/.. 2021. 7. 29.
코드업 6098 성실한 개미 Python 리스트 안에 리스트를 넣은 (0,0)으로 시작하는 [x][y] 좌표의 ary를 만든다. 좌표 배열과 관련한 문제는 코딩 테스트의 단골이니, 익숙해지면 좋을 것 같다. ary = [] for i in range(10): temp=list(map(int,input().split())) ary.append(temp) x=1 y=1 ary[x][y] = 9 ## (2,2)지점에서 출발 for i in range(10): for j in range(10): if ary[i][j] == 1: ## 장애물 ary[i][j] = 1 elif ary[i][j] == 9 and ary[i][j+1] == 0: ## 우측 이동 ary[i][j+1] = 9 elif ary[i][j] == 9 and ary[i][j+1] ==.. 2021. 7. 28.
백준 2562 최댓값 Python for 함수와 append를 활용하여 간단히 여러줄의 input값을 하나의 리스트로 받을 수 있다. n = [] for i in range(1, 10): n.append(int(input())) if i < 10: continue print(max(n)) print(n.index(max(n))+1) https://www.acmicpc.net/problem/2562 2021. 7. 18.
백준 1110 더하기 사이클 Python 생각보다 많이 까다로웠다. int 형식과 str 형식을 넘나들며 자릿수를 더하고 붙이는 사이클을 만드는 코딩이었다. 겨우 정답을 만들어내고 제출된 답안 목록을 보다가 유독 짧게 완성하신 분이 있었다. 살펴보니 10으로 나눠서 십의자리와 일의자리를 분리한 것을 보고 무릎을 팍 쳤다. 이랬으면 정말 간단했을텐데! 문제를 단순히 그대로 옮기는 것도 중요하지만, 숫자를 활용하는 아이디어를 도출해내는 것도 중요하다는 생각이 들었다. import sys input = sys.stdin.readline i = 0 first = input() second = first while 1: if int(second) < 10: ## 한자릿수에 0붙여 두자리 만들기 second = "0" + second else: secon.. 2021. 7. 18.
백준 10951 A+B Python EOF와 try-except에 대한 이해가 필요한 문제였다. EOF란 End of File의 약자로, EOF Error는 문서가 갑작스럽게 종료되어 발생한 에러를 말한다. 이를 방지하기 위해 try-except를 활용하여 예외처리를 하는 것이다. 이 문제에서는 while이 작동 중 에러 발생시 break하도록 되어 있다. import sys input = sys.stdin.readline while 1: try : A,B = list(map(int,input().split(" "))) print(A+B) except: break https://www.acmicpc.net/problem/10951 2021. 7. 16.
input() 함수 시간초과 코딩테스트에서 input() 함수를 사용하면 시간초과로 채점조차 되지 않은 경우가 많다. 이 경우 sys 라이브러리를 불러와 아래와 같이 대체하면 시간초과로 인한 어려움을 해결할 수 있다. import sys imput = sys.stdin.readline a = input() 2021. 7. 14.
백준 13458 시험감독 Python 제시된 문제에서의 예제는 모두 이상없이 출력되었는데, 자꾸 틀렸다는 결과를 보여줘서 한참 애를 먹었다. 결국 다른 사람들의 질문글을 몇 개 읽고 반례를 찾을 수 있었다. 예제에는 없지만 1개 시험장의 응시자 수보다 총감독관이 감시 가능한 인원이 크면 음수값을 가지게 된다. 이 경우에 대한 고려가 필요하다. import sys imput = sys.stdin.readline N=int(input()) #시험장 개수 = 총감독관 수 A = list(map(int,input().split())) #시험장 1개 내 응시자수 b,c = map(int,input().split()) m = 0 for k in A: k = k - b #응시자수 - 총감독관이 감시 가능한 응시자수 = 부감독관이 봐야하는 사람수 if k.. 2021. 7. 14.