전체 글
[백준 2908번-파이썬/Python] 상수
http://acmicpc.net/problem/2908 {코드} nums = map(int, map(lambda s: s[::-1], input().split())) print(max(nums)) {설명} 이 문제는 map함수와 문자열 슬라이싱을 통해 쉽게 풀 수 있습니다. 두 번째 map부터 살펴보면 람다 함수를 이용해 문자열을 뒤집는 코드입니다. 그 후 첫 번째 map이 각 뒤집은 문자열들을 숫자로 변환시킵니다. 그 후 최댓값을 출력하면 됩니다. {코드} nums = list(map(lambda s: s[::-1], input().split())) print(nums[0] if eval('>'.join(nums)) else nums[1]) {설명} 위의 코드는 eval함수를 사용한 것인데 제 이전 ..
[백준 1152번-파이썬/Python] 단어의 개수
http://acmicpc.net/problem/1152 {코드} print(len(input().split())) {설명} 이 문제는 굉장히 쉽게 풀 수 있는 문제이다. split함수는 인자로 주어진 문자열을 기준으로 어떤 문자열을 나누는 함수로서 나눈 리스트를 반환하고 기본적으로 공백을 기준으로 한다. 즉, "Hello World"라는 문자열에 split()을 실행하면 ["Hello", 'World"]의 리스트를 반환한다. 여기에 len함수를 사용하면 개수를 알 수 있으므로 아래와 같이 코드를 짜면 된다.
[백준 1157번-파이썬/Python] 단어공부
http://acmicpc.net/problem/1157 {코드} words = input().upper() word_list = list(set(words)) word_count = [words.count(c) for c in word_list] if(word_count.count(max(word_count)) > 1): print('?') else: print(word_list[(word_count.index(max(word_count)))]) {설명} 이 문제를 푸는 하나의 방법은 각 문자 별로(대소문자 구분 없이) 개수를 저장해서 만약 최댓값이 2개 이상이라면?를 출력하고 아니라면 최댓값을 가진 문자를 출력하면 됩니다. 이를 위해 집합과 count함수를 사용합니다. 먼저 문자열을 입력받고 대문자로..
[백준 2675번-파이썬/Python] 문자열 반복
http://acmicpc.net/problem/2675 {코드} for _ in range(int(input())): n, s = input().split() n = int(n) print(''.join([c*n for c in s])) {설명} 파이썬에서는 문자열*숫자를 통해 문자열을 간단히 반복할 수 있습니다. 코드를 보면 숫자 n과 문자열 s가 존재하고 s의 각 인덱스에 n을 곱한 문자열을 리스트로 저장하고 이를 join함수를 통해 합쳐 출력하고 있습니다.
[백준 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보다 같거나 작은 세 자리 숫자들만 등차수열의 여부를 판별하면 됩니다. 판별 방법은 (백의 자릿수)-(십의 자릿수) =..