분류 전체보기

    [백준 10809번-파이썬/Python] 알파벳 찾기

    http://acmicpc.net/problem/10809 {코드} word = input() alphabet = dict() for c in map(chr, range(97, 123)): alphabet[c] = -1 for i, c in enumerate(word): if alphabet[c] == -1: alphabet[c] = i print(*alphabet.values()) {설명} 이 문제는 딕셔너리 자료형을 쓸 수 있는 전형적인 문제라고 생각합니다. 먼저, 딕셔너리를 알파벳 소문자들을 각각 키(key)로 놓고 모든 키에 대한 값을 -1로 초기화시킵니다. 그 후, 입력받은 문자열을 enumerate함수를 통해 반복문을 돌려 만약 어떤 문자에 대한 딕셔너리 값이 -1이라면 업데이트하고 아니면 무..

    [백준 11720번-파이썬/Python] 숫자의 합

    http://acmicpc.net/problem/11720 {코드} input() print(sum(map(int, input()))) {설명} 이 문제는 각 자릿수의 합을 구하는 문제로 map함수와 sum함수를 통해 쉽게 풀 수 있습니다. *map함수의 두 번째 인자는 이터러블(iterable)로 문자열, 리스트, range 등이 해당한다.

    [백준 11654번-파이썬/Python] 아스키코드

    http://acmicpc.net/problem/11654 {코드} print(ord(input())) {설명} 먼저 아스키코드에 대한 설명을 하자면 아스키코드란 미국정보보환표준부호의 약자로 그냥 128개의 문자라고 보면 됩니다. 이 128개의 문자안에는 A~Z, a~z, 0~9, 그리고 각종 특수 문자가 포함되어 있고 쉽게 보면 영문 키보드라고 보셔도 됩니다. 이 128개의 문자는 한 바이트(8비트)로 만들어지며 한 개의 에러 확인용 비트를 제외한 7개의 비트로 구현되어 있습니다. 즉, 각각의 문자는 그에 상응하는 숫자를 가지고 있다는 뜻입니다. 더 자세한 내용은 이 블로그를 봐주시기 바랍니다.(설명을 잘 해놓으셨어요!) 그래서 아스키코드를 가져오려면 파이썬의 ord라는 함수를 사용하면 쉽게 가져올 수..

    [백준 1065번-파이썬/Python] 한수

    http://acmicpc.net/problem/1065 {코드} n = int(input()) if n < 100: print(n) else: cnt = 99 for i in range(100, n+1): d = tuple(map(int, str(i))) if d[0]-d[1] == d[1]-d[2]: cnt += 1 print(cnt) {설명} 이 문제는 등차수열인지 아닌지를 판별하는 문제입니다. 이때 몇 가지 방법을 통해 코드를 줄일 수 있는데 만약 N이 100보다 작다면 무조건 등차수열이므로 바로 N을 출력하면 됩니다. 또한 1000은 등차 수열이 될 수 없습니다. 그러면 결국 N보다 같거나 작은 세 자리 숫자들만 등차수열의 여부를 판별하면 됩니다. 판별 방법은 (백의 자릿수)-(십의 자릿수) =..

    [백준 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번째자리까지 출력할 수 있으며 자동으로 반올림한다.

    [백준 8958번-파이썬/Python] OX 퀴즈

    http://acmicpc.net/problem/8958 {코드} for _ in range(int(input())): quiz_answer = input() answer = 0 increment = 1 for ox in quiz_answer: if ox == 'X': increment = 1 else: answer += increment increment += 1 print(answer) {설명} 이 문제는 O가 연속될 수록 점수 증가폭이 1씩 증가하고 X가 등장하면 점수 증가폭이 1로 리셋되는 것을 파악하면 풀 수 있다. 입력받은 문자열(퀴즈의 답들)을 반복문에 넣어 만약 해당 문자(답)이 X면 증가폭을 1로 바꾸고 아니라면 점수에 증가폭을 더하고 증가폭에 1을 더한다.

    [백준 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로 나눈 것을 저장하고 집합으로 만들어준 다음 해당 집합의 원소의 개수를 출력하면 됩니다.