Python study 51

[Programmers] 등차수열의 특정한 항만 더하기

문제 설명 두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요. 제한사항 1 ≤ a ≤ 100 1 ≤ d ≤ 100 1 ≤ included의 길이 ≤ 100 included에는 true가 적어도 하나 존재합니다. 문제 풀이 접근 전략 등차수열의 특성을 이용하여, 각 항의 값은 첫째항 a에 (공차 d * 항의 인덱스)를 더하면 되는데, 그냥 true / false에 int 붙여서 곱해도 풀어짐. 이를 통해 included가 true인 항의 값을 계산하고, ..

[Programmers] 코드 처리하기

문제 설명 문자열 code가 주어집니다. code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다. mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다. * mode가 0일 때, - code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다. - code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다. * mode가 1일 때 - code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다. - code[idx]가 "1"이면 mod..

[Programmers] 대소문자 바꿔서 출력하기

문제 설명 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요. 제한사항 1 ≤ str의 길이 ≤ 20 str은 알파벳으로 이루어진 문자열입니다. 문제 풀이 접근 전략 문자열을 순회하면서 각 문자가 대문자인지 소문자인지 확인. 그 후 해당 문자를 반대로 바꿔 새 문자열에 추가하기. 이때 Python의 isupper(), islower(), lower(), upper() 같은 문자열 메소드를 이용해서 변경함. 코드 str = input() result = "" for char in str: if char.isupper(): result += char.lower() elif char.islower(): result +=..

[Python] 파이썬 - 재귀 호출로 피보나치 함수 작성하기

재귀 호출로 피보나치 함수 작성하기 재귀 호출이란 함수 내부에서 다시 해당 함수를 호출하는 방식을 말합니다. 많이 쓰이는 것 같진 않은데, 주로 알고리즘을 공부 할 때 그나마 사용했던 기억이 나네요. 주로 점화식을 표현할 때 썼던 것 같습니다. 가장 많이 쓰는 예시는 아무래도 계승 계산과 피보나치 계산입니다. 피보나치 함수의 구현 import time def fibonacci(n): if n

[Python] 파이썬 - 리스트 내포를 활용하여 에라스토테네스의 체 구현하기

에라스토테네스의 체 자연수를 순서대로 늘어놓은 표에서 합성수를 차례로 지워나가면서 소수 목록을 얻는 알고리즘. 위키피디아에서 가져온 에라스토테네스의 체 알고리즘의 pseudocode는 이런 방식이다. input을 n이라고 할 때, 검사는 1 ~ n이 아닌 1 ~ n의 제곱근까지만 하면 된다. 어차피 n보다 크면 n보다 작은 수로 합성수를 찾아낼 때 이미 걸려지기 때문이다. algorithm Sieve of Eratosthenes is input: an integer n > 1. output: all prime numbers from 2 through n. let A be an array of Boolean values, indexed by integers 2 to n, initially all set t..

[Rosalind] BA1D - Find All Occurrences of a Pattern in a String

BA1D - Find All Occurrences of a Pattern in a String *문제 링크 : https://rosalind.info/problems/ba1d/ 네 번째 문제입니다. 이번 문제는 주어진 Sequence에 대해서, 특정 패턴이 확인될 때 인덱스를 반환하면 되는 문제입니다. 아래 예시가 있습니다. ATAT GATATATGCATATACTT 1 3 9 GATATATGCATATACTT, GATATATGCATATACTT, GATATATGCATATACTT 3번 등장하네요. 0-based index니 1 3 9를 반환하면 됩니다. ba1a랑 비슷하게 풀면 됩니다. import pandas as pd file = pd.read_table("../../Downloads/rosalind_ba..

[Rosalind] BA1C - Find the Reverse Complement of a String

BA1C - Find the Reverse Complement of a String *문제 링크 : https://rosalind.info/problems/ba1c/ 세 번째 문제입니다. 주어진 Sequence에 대해서, 역 상보 서열 패턴을 반환하면 되는 문제입니다. 아래 예시가 있습니다. AAAACCCGGT ACCGGGTTTT AAAACCCGT가 TGCCCAAAA로 (Reverse), TGCCCCAAAA가 ACGGGTTTT로 (Complement) 변환된 것을 알 수 있습니다. import pandas as pd file = pd.read_table("../../Downloads/rosalind_ba1c.txt", header= None) 일단 불러오는 것 부터 시작합니다. 파일 경로는 알맞게 바꿔주..

[Rosalind] BA1B - Find the Most Frequent Words in a String

BA1B - Find the Most Frequent Words in a String *문제 링크 : https://rosalind.info/problems/ba1b/ 두 번째 문제입니다. 주어진 정수 k에 대해서, 가장 많이 등장하는 k-mer를 찾아 반환하면 되는 문제입니다. 아직까진 할 만 하니 가볍게 살펴볼까요. import pandas as pd file = pd.read_table("../../Downloads/rosalind_ba1b.txt", header= None) 일단 불러오는 것 부터 시작합니다. 파일 경로는 알맞게 바꿔주시고요. sequence = file[0][0] number = file[0][1] 함수의 input으로 들어갈 sequence와 number를 file 변수에서 찾..

[Rosalind] BA1A - Compute the Number of Times a Pattern Appears in a Text

BA1A - Compute the Number of Times a Pattern Appears in a Text * 문제 링크 : https://rosalind.info/problems/ba1a/ 첫 문제라서 그런가 슈도코드로 힌트를 주고 시작합니다. 가볍게 살펴볼까요. PatternCount(Text, Pattern) count ← 0 for i ← 0 to |Text| − |Pattern| if Text(i, |Pattern|) = Pattern count ← count + 1 return count 특정 Pattern이 주어질 시, 해당 Pattern이 Text에서 몇 번 확인되는지에 대한 내용입니다. 단순히 for 루프 안에다가 if 문을 두어 비교하면 되는 쉬운 문제입니다. import pand..