SW개발/코딩테스트

    [백준]10814번 나이순 정렬 - 정렬

    a = int(input()) b = [[0]*2 for i in range(a)] for i in range(a): b[i][0], b[i][1] = input().split() b.sort(key=lambda x:int(x[0])) for j in range(len(b)): print(b[j][0], b[j][1]) 코드 설명 입력을 받기 위한 0으로 이루어진 이차원 리스트를 초기화 하여 준다. 반복문을 돌면서 b 리스트에 값을 할당시켜준다. 그 후, 나이 순으로 정렬하기 위해 0 번째 인덱스를 기준으로 삼는다. b 리스트의 반복문을 돌면서 나이 값과 이름을 출력하여 준다. Point : 정렬 문제이기 때문에 sort() 함수를 lambda와 함께 이용하여 정렬 기준을 잘 설정하는 것이 중요하다.

    [백준]1181번 단어 정렬 - 정렬

    n = int(input()) a = [] b = [] for i in range(n): a.append(input()) a.sort(key=lambda x:(len(x), x)) for i in a: if i not in b: b.append(i) for j in range(len(b)): print(b[j]) 코드 설명 우선 a 리스트에 입력 문자들을 전부 할당한다. 그 후 sort() 함수를 이용하여 정렬하는데 첫 번째 기준은 문자열의 길이이고, 두 번째 기준은 오름차순으로 정렬한다. 또한, 중복을 제거하기 위하여 빈 리스트를 활용한다. a 리스트의 요소들을 반복문으로 돌면서 b 리스트에 복사하는데 중복인 요소가 있을 경우는 제외시킨다. 그 후 b 리스트를 출력시키면 완료된다. Point : 정렬을..

    [백준]11650번 & 11651번 좌표 정렬하기 1, 2 - 정렬

    n = int(input()) a = [[0] * 2 for i in range(n)] for i in range(n): a[i][0], a[i][1] = map(int,input().split()) a.sort(key=lambda x: (x[0], x[1])) for i in range(len(a)): print(a[i][0], a[i][1]) 코드 설명 이중 리스트를 점의 개수만큼 초기화 하고 하나의 리스트 당 2개의 원소를 갖도록 초기화 한다. 반복문을 통하여 리스트에 값을 넣어준다. sort() 함수의 key 값으로 lambda 를 이용하여 리스트의 0번째 인덱스를 기준으로 정렬한 후, 그 다음 정렬은 1번째 인덱스를 기준으로 정렬한다. Point : sort() 함수를 이용시 정렬 기준을 2개로..

    [백준]1427번 소트인사이드 - 정렬

    a = input() print(''.join(sorted(a, reverse=True))) 코드 설명 문자열로 입력을 받은 후 내장 정렬 함수인 sort를 통하여 내림차순으로 정렬한다. 리스트로 결과가 반환되기 때문에, join 함수를 통하여 하나의 문자열로 만들어서 출력하여준다. Point : 문자열도 내장정렬 함수로 정렬이 가능하고, 리스트의 형태를 다시 join 함수를 이용해 바꿔주는 것이 중요하다.

    [백준]2108번 통계학 - 정렬

    import sys from collections import Counter n = int(sys.stdin.readline()) a = [] for i in range(n): a.append(int(sys.stdin.readline())) a.sort() def avg(): print(round(sum(a)/len(a))) def center(): print(a[(len(a)//2)]) def max(): result = Counter(a) result_ = result.most_common() if len(a) > 1: if result_[0][1] == result_[1][1]: print(result_[1][0]) else: print(result_[0][0]) else: print(result_..

    [백준]10989번 수 정렬하기 3 - 정렬

    import sys n = int(sys.stdin.readline()) a = [0]*10001 for i in range(n): index = int(sys.stdin.readline()) a[index] += 1 for j in range(10001): if a[j] != 0: for x in range(a[j]): print(j) 코드 설명 input() 함수 대신 sys.stdin.readline() 함수를 이용함으로써 입력 받는 속도를 빠르게 처리할 수 있다. 먼저 수의 한계가 10000이므로 10001 크기의 리스트를 0으로 초기화 하여 준다. 반복문을 돌면서 입력받는 수를 인덱스로 하여 1씩 증가시켜 해당 수가 몇번 등장했는지 세준다. 그 후 배열을 돌면서 0번 등장한 수는 제외하고 나머지..

    [백준]2750번, 2751번 수 정렬하기 1, 2 - 정렬

    n = int(input()) a = [] for i in range(n): a.append(int(input())) a.sort() for j in range(len(a)): print(a[j]) n = int(input()) a = [] for i in range(n): a.append(int(input())) a.sort() for j in range(len(a)): print(a[j]) Point : 위 두문제의 경우 파이썬의 내장 정렬 함수인 sort()를 사용하면 쉽게 풀 수 있다.

    [프로그래머스]다리를 지나는 트럭-스택/큐

    def solution(bridge_length, weight, truck_weights): queue = [0] * bridge_length cnt = 0 while queue: cnt += 1 queue.pop(0) if truck_weights: if sum(queue) + truck_weights[0]

    [프로그래머스]기능 개발-스택/큐

    import math def solution(progresses, speeds): answer = [] while progresses: for i in range(len(progresses)): progresses[i] += speeds[i] cnt = 0 while progresses and progresses[0] >= 100 : progresses.pop(0) speeds.pop(0) cnt += 1 if cnt > 0 : answer.append(cnt) return answer 코드 설명 progresses 리스트에 값이 있는 동안 반복문을 수행한다. 먼저 progresses 리스트와 speeds 리스트를 더해서 1일이 지난 후의 작업량을 구해준다. 그 후 progresses 리스트에 값이 존재..

    [프로그래머스]주식가격-스택/큐

    def solution(prices): answer = [] for i in range(len(prices)): cnt = 0 for j in range(i+1, len(prices)): cnt += 1 if prices[i] > prices[j]: # 가격이 떨어짐을 의미 break answer.append(cnt) return answer 코드 설명 첫번째 반복문에서는 prices 리스트의 길이만큼 반복한다. 카운트를 위한 변수를 0으로 초기화 한다. 다음 반복문은 i+1 부터 시작하여 prices 리스트의 길이만큼 반복한다. 만약 prices[i] > prices[j] (즉, 가격이 떨어졌다면) break를 통해 두번째 반복문을 탈출한다. 그렇지 않다면 (즉, 가격이 떨어진 적이 없다면) 반복문을 ..