Counting Sort의 방식을 사용했다. 각 원소의 등장 횟수를 리스트에 저장하고 순서대로 등장 횟수만큼 출력한다.문제풀이import sys s = sys.stdin.readline lst = [0] * 10001 for i in range(int(s())): lst[int(s())] += 1 for i in range(1,10001): print("{}\n".format(i)*lst[i],end="")
원래는 병합 정렬, 힙 정렬 같은 O(NlogN) 이하의 시간복잡도를 갖는 정렬을 사용해야 한다.하지만 파이썬은 매우 느린 언어이기 때문에 직접 정렬을 구현해도 시간 초과가 나올 확률이 높다.그렇기에 내장 정렬 함수인 sorted()와 input() 대신 sys.stdin.readline을 사용해 정렬했다.중복되는 값은 set 자료형을 사용해 제거했다.문제풀이import sys ipt = sys.stdin.readline S = set() for i in range(0,int(ipt())): S.add(int(ipt())) for i in sorted(S): print(i)
분자 혹은 분모의 최댓값을 알기 위해 반복문을 사용해 N의 값을 1씩 증가시키며 X가 0 이하가 될 때까지 뺀다.이때 X는 0 이하의 숫자가 되기에 1을 더해 양수로 변환한다. 분자가 1 증가하면 분모가 1 감소하거나 그 반대의 형식이기에 분자나 분모를 구하기 위해 N에서 X를 더해 감소한 값을 구한다.그리고 지그재그 순서임을 고려하여 N이 짝수일 때는 분모가 1씩 감소하고 홀수일 때는 반대의 형식으로 출력한다.문제풀이 X,N = int(input()),0 while X > 0: N += 1 X -= N if N % 2 == 0: print("{0}/{1}".format(N+X,1-X)) else: print("{0}/{1}".format(1-X,N+X))
1부터 8까지의 수를 range()를 사용해 리스트에 저장한다.리스트 컴프리헨션을 사용해 리스트의 값과 입력받은 값을 차례대로 비교한 check와 역순으로 비교한 rvcheck를 만든다.all()을 사용해 check가 전부 true일때 ascending을 출력하고 rvcheck가 전부 true일 때는 descending을 출력한다.전부 아닐 때는 mixed를 출력한다.문제풀이lst = range(1, 9) scale = list(map(int,input().split())) check = [x == scale[x - 1] for x in lst] rvcheck = [x == scale[8 - x] for x in lst] if all(check): print("ascending") elif all(rvc..
먼저 입력받은 문자열을 upper()를 사용해 대문자로 변환하고 collections.Counter()를 사용해 알파벳의 개수를 저장한다.딕셔너리 형태로 저장된 알파벳 개수의 가장 큰 값과 알파벳의 value를 비교해 다르면 해당 알파벳을 제거한다.최종적으로 딕셔너리에 남은 알파벳의 개수가 2개 이상일 경우 ?를 출력하고 아니면 해당 알파벳을 출력한다.문제풀이import collections string = collections.Counter(input().upper()) for k, v in dict(string).items(): if v != max(string.values()): del string[k] if len(string) >= 2: print("?") else: print("".join(l..