분류 전체보기

    [백준 2292번-파이썬/Python] 벌집

    http://acmicpc.net/problem/2292 {코드} n = int(input()) cnt = 1 while n > 1: n -= 6*cnt cnt += 1 print(cnt) {설명} 먼저 규칙을 알기 위해 다음 표를 봐주시기 바랍니다. 숫자 범위 답 마지막 수의 수식 지난 범위와 6의 계수 차 1 1 1 + (6*0) 0 2~7 2 1 + (6*1) 1 8~19 3 1 + (6*3) 2 20~37 4 1 + (6*6) 3 위의 표를 보면 지난 범위와의 계수 차와 답은 1 차이라는 것을 알 수 있는데 이는 시작점도 포함하기 때문입니다. 그러면 입력받은 수에서 6의 배수별로 빼가며 1보다 작을 때까지 반복하면 됩니다. 이때 1보다 작다라고 하는 이유는 시작이 1이기 때문에 수의 단계의 범위가..

    [백준 2839번-파이썬/Python] 설탕 배달

    http://acmicpc.net/problem/2839 {코드} n = int(input()) cnt = 0 while True: if n % 5 == 0: print(cnt + n // 5) break n -= 3 cnt += 1 if n 15//5 굉장히 당연한 식인데요, 이를 이용해 5의 배수가 될때까지 3을 계속해서 빼주면 세 가지의 경우 중 하나가 발생합니다. n이 5의 배수인 경우 - 이때는 n을 5로 나눈 몫과 현재 봉지의 개수를 더한 값을 출력함 n이 0인 경우 - 이때도 n을 5로 나눈 나머지가 0이므로 결과적으로 봉지의 개수 출력 n이 0보다 작은 경..

    [백준 1712번-파이선/Python] 손익분기점

    http://acmicpc.net/problem/1712 {코드} a, b, c = map(int, input().split()) if c

    [백준 1316번-파이썬/Python] 그룹 단어 체커

    http://acmicpc.net/problem/1316 {코드} ans = 0 for _ in range(int(input())): word = input() new_word = '' isTrue = True for c in word: i, j = word.find(c), word.rfind(c) if word.count(c) != j-i+1: isTrue = False break ans += isTrue print(ans) {설명} *True는 숫자 1의 값을, False는 숫자 0의 값을 가지고 있습니다. 위 방법은 어떤 문자에 대해 그 문자의 처음과 마지막 위치를 통해 문자들이 연결되어 있는지 아닌지 확인합니다. 예시를 들어 설명해보겠습니다. -그룹 문자인 예 word라는 변수가 있고 'hhaap..

    [백준 2941번-파이썬/Python] 크로아티아 알파벳

    http://acmicpc.net/problem/2941 {코드} croatian_alphabets = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] word = input() for c_alphabet in croatian_alphabets: word = word.replace(c_alphabet, ' ') print(len(word)) {설명} 문제는 크로아티아 알파벳의 개수를 출력하라고 요구하므로 크로아티아 알파벳의 특이 문자들을 아무 문자 하나로 각각 바꿔주고 그 길이를 출력하면 됩니다. *문자열의 replace함수는 replace(선택할 문자열, 바꿀 문자열, 개수=옵션)의 형태로 되어 있으며 바꾼 문자열을 반환한다.

    [백준 5622번-파이썬/Python] 다이얼

    http://acmicpc.net/problem/5622 {코드} classify = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] s = input() ans = 0 for c in s: for idx, dial in enumerate(classify): if c in dial: ans += 3 + idx break print(ans) {설명} 다음 표를 보면 알파벳을 문제의 다이얼과 같이 구분해서 리스트로 만들었을 때 인덱스와 걸리는 시간과의 관계를 알 수 있다. 알파벳 걸리는 시간 인덱스 구분 ABC 3 0 0 + 3 DEF 4 1 1 + 3 GHI 5 2 2 + 3 JKL 6 3 3 + 3 MNO 7 4 4 + 3 PQRS 8 5 5 + ..

    [백준 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함수를 통해 합쳐 출력하고 있습니다.