목록programmers (43)
jyamethyst21 님의 블로그
문제: 세균 수와 경과한 시간이 주어질 때, 해당 시간 이후에 존재하는 세균 수를 바로 출력하면 된다. 풀이:def solution(n, t): return n * (2 ** t)
문제: 정수 n이 있을 때 해당 정수의 약수를 오름차순으로 전부 출력하는 문제이다. 이때 출력 형식은 배열이어야 한다. 풀이:def solution(n): result = [] for i in range(1,n+1): if n % i == 0: result.append(i) return result약수는 해당 수로 나눴을 때 딱 떨어지기 때문에 해당 특성을 활용하여 문제를 풀면 된다.먼저 결과값을 담을 result 리스트를 선언하고, 반복문을 활용하여 1부터 n까지 1씩 더하면서 나눠 떨어지는지 확인한다. 이후 떨어진다면 결과 리스트인 result에 해당 값을 추가하고 마지막으로 해당 리스트를 반환하면 된다.
문제: n을 입력받았을 때, n이 제곱수라면 1, 아니라면 2를 출력하는 문제이다.제곱수란 '2*2=4'와 같이 같은 수를 곱한 수를 의미한다. 풀이:def solution(n): for i in range(1, 1001): if i*i==n: return 1 elif i*i>n: return 2 return 2문제 자체에 1,000,000까지 제한이 있기 때문에 반복문을 활용하여서 1부터 1000까지만 반복문을 돌도록 하였다.i를 제곱했을 때 n이라면 1을 리턴하고(제곱수이므로), 그렇지 않으면 2를 리턴하는 로직으로 코드를 작성하였다. n보다 i*i가 큰 경우여야 하는 이유는 작은 경우로 작성 시 문제가 발생하기 때문이다.예를..
문제: str1 안에 str2가 들어있으면 1을 그렇지 않으면 2를 출력하는 문제이다.예를 들어 str1이 'appleabc'이고 str2가 'apple'라면 str1에 포함이 되므로, 1을 출력하면 된다. 풀이:def solution(str1, str2): if str2 in str1: return 1 else: return 2str1 안에 str2가 존재하면 1을 리턴, 그렇지 않으면 2를 리턴하는 문제이다.if ~ in문을 통해 문제를 바로 풀 수 있다.
문제: 정수 n을 입력받고, 각 자리의 수를 전부 돌면서 합을 구하는 문제이다. 풀이:def solution(n): total = 0 for i in str(n): total += int(i) return total우선 정수 형태의 수는 반복 가능한 객체가 아니기 때문에 반복문을 통해 수를 바로 더할 수 없다.그래서 str 형태로 변환을 해준 뒤 더할 때만 int로 바꾸어서 total 변수에 더한 뒤 이를 리턴하면 된다.
문제: 정수와 정수 배열을 입력받고, 정수 배열에서 정수의 배수가 아닌 수들은 제거하고 배수인 수만 남겨서 리턴하는 문제이다. 풀이:def solution(n, numlist): answer = [] for i in numlist: if i % n == 0: answer.append(i) return answer반환할 리스트를 초기화하고 반복문을 통해 각 자리의 수를 하나씩 확인한 다음, 각각의 수를 n으로 나눈 값이 0인 경우(즉, 나눠 떨어지는 경우)에 반환할 리스트에 해당 값을 추가한 후 최종적으로 해당 리스트를 반환하는 코드이다.
문제: 배열을 입력받고, 배열에 존재하는 가장 큰 수와 큰 수가 존재하는 인덱스를 배열 형태로 출력하는 문제이다. 풀이:def solution(array): li = [] number = max(array) li.append(number) li.append(array.index(number)) return li새로운 리스트에 가장 큰 값을 넣고(max 활용), 특정 값의 인덱스를 반환해주는 index 함수를 활용하여 나온 결과값을 li 리스트에 추가한다.마지막으로 해당 리스트를 반환해주면 된다.
문제: my_string에 소문자가 존재하면 대문자로, 대문자가 존재하면 소문자로 변경해서 이를 출력하는 문제이다. 풀이:def solution(my_string): answer = "" for i in my_string: if i.isupper(): answer += i.lower() else: answer += i.upper() return answer변환된 문자열을 반환하기 위하여 answer 변수를 초기화하고, 반복문을 통해 모든 문자열을 확인한다.이때 파이썬의 isupper()를 활용해서 만약 대문자라면 이를 소문자로 바꾼 뒤 answer 변수에 추가하고, 그렇지 않다면 대문자로 바꿔서 추가하는 로직을 세웠다.최종적..
문제: 입력받은 세 변의 길이를 확인해서 삼각형을 만들 수 있다면 1을, 그렇지 않다면 2를 출력하는 문제이다. 풀이:def solution(sides): new = sorted(sides, reverse = True) if new[0] 삼각형을 만들기 위해서는 세 변 중 가장 큰 값이 나머지 두 변의 값을 더한 값보다 작아야 한다.즉 a가 가장 긴 값, b, c가 나머지 두 변이라면 'a 가 성립되어야 삼각형을 만들 수 있다. 해당 공식을 활용하여 필자는 sorted 함수를 활용해서 입력받은 배열을 내림차순으로 정렬하고, 정렬 이후 첫 번째 인덱스 값이 가장 큰 값이 되기 때문에, 해당 값과 나머지 두 변의 값을 더한 값을 비교해서 가장 길이가 긴 변이 두 변을 더한 수보다 작으면 1..
문제: 문자열이 주어질 때, 해당 문자열에 존재하는 숫자를 전부 더해서 리턴하는 문제이다. 풀이:def solution(my_string): li = ['0','1','2','3','4','5','6','7','8','9'] result = 0 for i in my_string: if i in li: result += int(i) return result문자열에 숫자가 포함되어 있는지 확인하는 함수인 isdigit()을 활용하는 방법도 있으나, 필자는 최대한 함수를 쓰지 않고 작성하기 위해 상기와 같이 작성하였다. 입력받은 문자열 type이 문자이므로 숫자인지 확인하기 위해서 li 리스트에 숫자를 문자 형태로 작성해서 저장하였다. 그 후 결과값을 담을..
