알고리즘 공부

    [백준 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 뒤에 ..

    [백준 10952번-파이썬/Python] A+B - 5

    http://acmicpc.net/problem/10952 {코드} while True: a, b = map(int, input().split()) if a == b == 0: break print(a+b) {설명} 이 문제는 while문을 이용한 문제로 입력의 두 숫자가 0, 0이 아닐 때까지 두 숫자의 합을 출력하는 문제입니다. while문과 for문의 차이를 간단히 설명하면 for문은 반복 횟수를 알때, while문은 어떤 조건에 부합할 때까지 반복할 때 사용합니다.

    [백준 10871번-파이썬/Python] X보다 작은 수

    http://acmicpc.net/problem/10871 {코드} _, x = map(int, input().split()) for data in map(int, input().split()): if data < x: print(data, end=' ') {설명} 반복문과 조건문을 같이 사용하는 문제로 쉽게 풀 수 있는 문제이다. 한 가지 알아둘 것은 map함수는 iterable로 반복문에서 한 값씩 가져오는 것이 가능하다는 것이다. *print문은 기본적으로 \n을 실행하지만 end=을 통해 마지막에 붙일 문자열을 지정할 수 있다.

    [백준 2439번-파이썬/Python] 별 찍기 - 2

    http://acmicpc.net/problem/2439 {코드} n = int(input()) for i in range(1, n+1): print(' '*(n-i) + '*'*i) {설명} 이 문제도 지난 글과 같이 반복문의 전형적인 문제인 별 출력 문제입니다. 타 언어라면 이중 반복문을 사용해야 할 문제지만 파이썬의 * 연산자로 쉽게 풀 수 있습니다. 이 문제는 n번 줄에 n개의 별(*)을 출력하는 문제인데, 각 줄에 별을 출력하기 전에 공백이 있다는 걸 알 수 있습니다. 공백의 규칙은 매우 간단한데요, 바로 (총 줄의 수 - 현재 줄이 번호) 입니다. 예를 들어 총 줄의 수가 5라면 첫째줄에는 공백 4개와 별 1개, 둘째줄에는 공백 3개와 별 2개가 되는 것입니다. 다른 규칙으로는 한 줄에 공백의..

    [백준 2438번-파이썬/Python] 별 찍기 - 1

    http://acmicpc.net/problem/2438 {코드} for i in range(1, int(input())+1): print('*'*i) #----# [print('*'*i) for i in range(1, int(input())+1)] {설명} 별 찍기는 반복문을 공부할 때 가장 기본적인 문제로 피라미드, 다이아몬드, 삼각형 등 여러 유형이 있습니다. 이 문제는 그 중 가장 쉬운 삼각형 문제로 n번 줄에 n개의 별(*)을 출력하는 문제입니다. 다른 언어라면 이중 반복문을 사용할 문제지만 파이썬은 * 연산자를 사용하면 쉽게 풀 수 있습니다.