백준파이썬

    [백준 4673번-파이썬/Python] 셀프 넘버

    http://acmicpc.net/problem/4673 {코드} numbers = {i for i in range(1, 10001)} generated = set() for i in range(1, 10001): i += sum(map(int, str(i))) if i > 10000: continue generated.add(i) [print(i) for i in sorted(list(numbers-generated))] {설명} 이 문제는 집합을 이용해서 풀 수 있습니다. 먼저 1부터 10000까지 반복하며 각 숫자의 d(n)들로 이루어진 집합을 만들면 해당 집합에는 셀프 넘버가 없습니다. 그러므로 1부터 10000까지의 수를 가진 집합에서 위의 집합을 빼면 셀프 넘버들로만 이루어진 집합이 만들어집니..

    [백준 15596번-파이썬/Python] 정수 N개의 합

    http://acmicpc.net/problem/15596 {코드} def solution(a): return sum(a) {설명} 이 문제는 함수를 배웠다면 굉장히 쉽게 풀 수 있는 문제로 a라는 리스트를 입력받으면 그 합을 반환하면 된다. *람다(lambda) 함수를 사용한 풀이를 여러 번 변형하며 제출해봤지만 런타임 에러가 뜨는 것을 보아 인식하지 못하는 듯하다.

    [백준 4344번-파이썬/Python] 평균은 넘겠지

    http://acmicpc.net/problem/4344 {코드} for _ in range(int(input())): n, *data = list(map(int, input().split())) avg = sum(data)/n cnt = 0 for score in data: if score > avg: cnt += 1 print('%.3f%%' %(cnt/n*100)) {설명} 첫 번째 줄을 제외한 각 줄에서 평균을 구한 다음 평균보다 점수가 높은 사람의 수를 구하는 문제이다. *퍼센트(%)를 출력하려면 %%를 사용해야 하며 "%.Nf"를 통해 N번째자리까지 출력할 수 있으며 자동으로 반올림한다.

    [백준 1546번-파이썬/Python] 평균

    http://acmicpc.net/problem/1546 {코드} input() data = list(map(int, input().split())) M = max(data) data = list(map(lambda d: d / M * 100, data)) print(sum(data)/len(data)) {설명} 이 문제는 간단한 사칙연산 문제로 4번째 줄의 람다 함수를 통해 퍼센트를 구하고 그 평균을 출력합니다.

    [백준 3052번-파이썬/Python] 나머지

    http://acmicpc.net/problem/3052 {코드} data = [int(input())%42 for _ in range(10)] diff = set(data) print(len(diff)) {설명} 이 문제는 집합(Set)을 통해 쉽게 풀 수 있습니다. 집합은 중복된 원소들을 한 개만 남기고 없애기 때문에 이런 문제에 사용하기 적합합니다. 각 입력을 42로 나눈 것을 저장하고 집합으로 만들어준 다음 해당 집합의 원소의 개수를 출력하면 됩니다.

    [백준 2577번-파이썬/Python] 숫자의 개수

    http://acmicpc.net/problem/2577 {코드} data = input()+input()+input() count = [0]*10 for i in data: count[int(i)] += 1 [print(i) for i in count] {설명} 이 문제는 입력된 세 숫자들에 0~9까지의 숫자가 각각 몇개씩 있는지 찾아내는 문제로 모든 입력을 문자열 한개로 받고 그 문자열을 반복하며 각 숫자의 개수를 리스트에 저장하며 풀 수 있다. {코드} from collections import Counter data = input()+input()+input() count = Counter(data) for i in range(10): print(0 if str(i) not in count els..

    [백준 2562번-파이썬/Python] 최댓값

    http://acmicpc.net/problem/2562 {코드} m, i = 0, 0 for j in range(9): n = int(input()) if n > m: m, i = n, j+1 print(m) print(i) {설명} 사실 이 문제는 배열에 저장하지 않아도 풀 수 있는 문제로 9번 반복문을 돌리며 가장 큰 값과 몇 번째 반복인지(해당 배열의 인덱스)를 저장해가며 반복이 끝나면 마지막으로 저장된 인덱스를 출력하면 됩니다. {코드} data = [int(input()) for _ in range(9)] print(max(data)) print(data.index(max(data))+1) {설명} 또다른 방법은 파이썬의 리스트 메서드를 사용하는 방법입니다. 리스트에는 index라는 메소드가 ..

    [백준 10818번-파이썬/Python] 최소, 최대

    http://acmicpc.net/problem/10818 {코드} input() data = list(map(int, input().split())) print(min(data), max(data)) {설명} 이 문제는 n개 만큼의 수를 입력받아 배열에 저장해 이 배열의 최솟값괴 최댓값을 출력하는 문제입니다. 파이썬에는 기본적으로 내장되어있는 min, max 함수가 있는데 이를 통해 굉장히 쉽게 문제를 풀 수 있습니다. 참고로 입력 첫줄의 n은 파이썬의 input은 줄단위로 입력받기 때문에 이번 문제에는 아무 쓰임이 없어 따로 저장하지 않습니다.

    [백준 1110번-파이썬/Python] 더하기 싸이클

    http://acmicpc.net/problem/1110 {코드} n = k = int(input()) count = 0 while True: k = (k%10) * 10 + (k//10 + k%10) % 10 count += 1 if k == n: print(count) break {설명} 이 문제의 규칙은 다음과 같습니다. 이전 숫자를 n이라 둘때, 다음 숫자는 n의 일의 자리 수에 10을 곱하고 n의 각 자리의 합의 일의 자리 수를 더한다 이렇게 만들어진 숫자가 처음에 입력받은 수와 같다면 위의 연산을 한 횟수를 출력하면 됩니다.

    [백준 10951번-파이썬/Python] A+B - 4

    http://acmicpc.net/problem/10951 {코드} while True: try: a, b = map(int, input().split()) print(a+b) except EOFError: break {설명} 이 문제의 요점은 테스트 케이스의 수를 모른다는 것이다. 즉, EOF에 대해 알아야 합니다. EOF란 End of File의 약자로 간단하게 말하면 입력 파일의 마지막 줄까지 읽고 더 이상 읽을 것이 없다는 것입니다. 이렇게 EOF가 되면 입력에서 에러가 나기 때문에 프로그램의 정상적인 작동을 위해 에러 핸들링을 합니다. 파이썬의 try/except/finally를 알면 while문과 함께 사용하여 쉽게 풀 수 있는 문제가 되겠습니다. *다른 분들의 코드를 보면 except 뒤에 ..