분류 전체보기


문제유형그리디 알고리즘풀이 방법 도출 과정1. 3킬로, 5킬로만 담을 수 있는 봉지가 있다. 주어진 킬로로 최소의 봉지수 구하기2.5로 계속해서 나누면서 카운트하는 방식으로 이를 풀어보도록 하겠다. 시간 복잡도시간복잡도는 입력 후 for문이 최대 1번 사용되고 있기 떄문에 O(n)이다. 코드 및 간단설명그리다 알고리즘과 완전 탐색 알고리즘을 사용하여 def min_bags(n): # 5kg 봉지를 최대한 많이 사용 for i in range(n // 5, -1, -1): # 5kg 봉지 개수를 줄여가면서 탐색 remainder = n - (i * 5) # 5kg 봉지를 사용하고 남은 무게 if remainder % 3 == 0: # 나머지가 3으로 나누어 떨어지는..


문제유형스택풀이 방법 도출 과정1. "("는 ")"와 짝꿍 "["는 "]"과 짝궁 이를 맞추지 않고 있다면, no출력 그 반대는 yes출력을 한다. "."는 줄이 끝났다는 신호이다.2. 스택을 활용하면 괄호의 올바른 짝을 쉽게 확인할 수 있음3. 왼쪽 괄호를 만나면 스택에 추가4. 오른쪽 괄호를 만나면 스택에서 짝이 맞는 괄호가 있는지 확인 후 제거. - 짝이 맞지 않으면 no 출력- 짝이 맞지 않거나 스택이 비어있는데 닫는 괄호가 나오면 no 출력5. 모든 문자열을 처리한 후에도 스택에 괄호가 남아 있으면 no 출력- 스택이 비어 있으면 yes 출 시간 복잡도시간복잡도는 for문이 입력되는 순서대로 적용되고 있기에 대략 O(n)로 보여진다. 그리고 for 문의 스택의 연산은 O(1)이다. 그렇기 때문에..


문제유형그래프 탐색 (DFS, BFS)풀이 방법 도출 과정1. 그래프탐색 기법에서 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)를 사용하는 문제이다.2. DFS는 왼쪽부터 시작해서 점차 오른쪽으로 계산하는 방식이며 BFS는 가장 가까운 것을 순서대로 계산하는 방법이다.3. DFS, BFS 구현시간 복잡도그래프 입력 처리는 간선의 개수만큼 반복하기에 O(M)정렬을 하기 위해서는 정점 개수만큼 반복하기(n*n)에 최악의 경우에는 O(V log V)DFS는 각 정점도 확인하고 노드도 확인하고 있기에 O(V + E) 이는 BFS도 마찬가지이기 때문에 O(V + E) 이를 모두 합하면 O(V logV + V + E)가 된다. 그러므로 회소 그래프에서는 O(V log V)가 될 수 있다. 더 빡빡한 그래프를..


문제유형에라토스테네스의 체풀이 방법 도출 과정1. 에라토스테네스 체를 사용하는 문제이다.2. 1은 소수가 아니므로 제외해준다. 3. 소수 판별을 위한 반복문을 실행한다. 반복범위는 2부터 int(i ** 0.5) + 1까지이다.특정 수의 제곱근까지만 약수를 검사하면, 해당 수의 모든 약수를 판별할 수 있다.4. 약수가 존재하면 소수가 아니다.만약 i가 j로 나누어떨어진다면, i는 약수를 가지므로 소수가 아니다.그렇지 않다면 i는 소수이다. 5. 이 방식대로 코드를 작성해보았다. 시간 복잡도외부 for문은 m에서 n까지 i번 반복하기 때문에 대략 O(n)이며 내부 반복문은 2에서 int(i**0.5)+1개 반복하기 때문에 대략 O(i**0.5)인데 전체 복잡도는 i**0.5를 n번 반복하기 때문에 적분을 ..


내 풀이첫째 줄 단어 S 각각의 알파벳에 대해서 a가 처음 등장하는 위치, b가 처음 등장하는 위치 z가 처음 등장하는 위치를 공백으로 구분하여 출력어떤 알파벡이 단어에 포함되어 있지 않다면 -1를 출력한다. S = input()alpha = 'abcdefghijklmnopqrstuvwxyz'results = [-1] * 26for i in range(len(S)): results[alpha.index(S[i])] = S.index(S[i])print(*results)내가 하고자 한 것은 S를 순회해서 인덱스의 순서를 result에 알파벳순서대로 넣는 것이다.결과: 정답, 하지만 다시 공부할 필요있음.또 다른 풀이S = list(input())c = 'abcdefghijklmnopqrstuvwxy..


주제: 세포막은 지질과 단백질로 구성된 유동모자이크이다. 세포막은 단순한 장벽이 아니라, 세포의 기능과 구조를 결정하는 중요한 요소이다. 탄수화물도 세포막에서 중요한 역할을 하지만, 지질과 단백질이 막의 주요 구성 성분이다. 대부분의 세포막에서 가장 풍부한 지질은 인지질이며, 인지질은 친수성(head)과 소수성(tail) 부분을 동시에 지닌 양친매성(amphipathic) 분자이다. 이는 세포막이 안정적인 경계를 형성할 수 있도록 한다. (그림 8.2 참조) 세포막의 구조를 설명하는 대표적인 모델은 유동 모자이크 모형(Fluid Mosaic Model)이다. 이 모형에 따르면, 세포막은 인지질 이중층 위에서 다양한 단백질들이 자유롭게 이동하는 모자이크 구조를 갖는다. (그림 8.3 참조) 막 내에서 단백..


내 풀이첫재줄에 숫자의 갯수두번째줄에 주어진 값 주어진 값들을 다같이 더하는 코드를 작성. 단, 주어진 값들은 공백이 없기에 주의count = int(input())numbers = list(input())for i in range(count): numbers[i] = int(numbers[i])print(sum(numbers))이번에 내가 한 풀이는 일단은 문자열을 받는 대신 문자열 리스트로 값들을 받고 리스트에 있는 값들을 int로 바꾸어 답을 구하였다.결과: 정답또 다른 풀이num = input()numbers = list(map(int,input()))print(sum(numbers)) [BAEKJOON]백준 11720번: 숫자의 합 파이썬문제 N개의 숫자가 공백 없이 쓰여있다. 이 숫자를..


내 풀이문자열을 두고 이를 아스키 코드로 출력하는 프로그램 작성 이것의 경우에는 아는 것이 없기에 풀 수 없었다. 결과: 틀림정답a = input() print(ord(a)) (파이썬) 백준 알고리즘 11654번 아스키 코드문제풀이 (Python) 123a = input() print (ord(a))cs키워드 (Keyword)키워드 ord() : 문자의 아스키 코드값을 리턴하는 함수이다.chr() : 아스키 코드값 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이j-remind.tistory.com이 내용의 경우에는 ord함수라는 내장함수를 아는 것이 중요했다.틀린 이유아스키코드를 변환하는 것에 대해서 알지 못했다.고찰1. 아스키코드란 무엇인가?컴퓨터가 문자를 저장하고 처리할 수 있도록 만든 표..


내 풀이문자열을 입력으로 주면 문자열의 첫글자와 마지막 글자를 출력하는 프로그램을 작성하시오첫줄 테스트 케이스 갯수나머지줄 문자열들A = int(input())for _ in range(A): String = input() print(f"{String[0]}{String[-1]}")문자열을 받고 이를 인덱스값을 사용하여 풀었다.결과: 정답또 다른 풀이case_num = int(input())for _ in range(case_num): word = input() print(word[0], word[-1], sep='') [파이썬/Python] 백준 9086번 문자열[파이썬/Python] 백준 9086번 문자열 www.acmicpc.net/problem/9086 9086번: 문자열..


내 풀이문자열의 길이를 구하는 문제A = input()print(len(A))이 문제는 문자열의 길이가 len()으로 구할 수 있다는 것을 이해하면 풀 수 있는 문제였다.결과: 정답또 다른 풀이또 다른 풀이로 list형식으로 바꾸어서 사용하는 방법도 있으나 이 방법은 시간복잡도로 볼 때 불필요한 것이다. 고찰이 코드의 시간 복잡도와 공간 복잡도는 어떻게 될까?len(A)는 O(1)의 시간 복잡도를 가지고 있다.


내 풀이S의 i번째 글자 출력첫째줄 문자열둘째줄 숫자S = input()i = int(input())print(S[i - 1]) 문자열을 입력받고 숫자를 입력받은 후, [] 인덱싱을 활용하여 문제를 간단하게 해결했다. 문자열도 리스트처럼 인덱스를 이용해 접근할 수 있기 때문에, []를 사용하여 특정 위치의 값을 쉽게 얻을 수 있다. 이 방식은 문제를 더 효율적으로 풀 수 있게 해주었다.결과: 정답또 다른 풀이arr = list(input())i = int(input())print(arr[i-1]) [백준] 27866번 문자와 문자열 / Python백준 알고리즘 문자열: 27866번 문자와 문자열 | 문자열을 한 글자씩 끊어서 리스트에 넣기velog.io이 방법은 문자열을 리스트 형태로 변환한 후, 인덱싱..


첫째줄 시험본 과목 개수 N둘째줄 성적 이줄 최댓값 M 모든 점수를 점수/M*100으로 고친다. 이를 토대로 성적을 출력하는 프로그램 작성count = int(input())scores = list(map(float, input().split()))scores.sort()for i in range(count): scores[i] = scores[i] / scores[-1] * 100print(sum(scores)/count) 결과: 정답또 다른 풀이subject = int(input())scores = list(map(int, input().split()))M = max(scores)for i in range(subject): scores[i] = scores[i]/M*100print(sum(..


첫째 줄N, MN은 바구니의 개수를 의미하며, 각 바구니에는 1번부터 N번까지 번호가 순서대로 적혀 있다. M은 바꾸어야 하는 순서의 개수다.두번째 줄 i, ji번 바구니부터 j번 바구니까지의 순서를 역순으로 뒤집는다는 뜻 N, M = map(int, input().split())values = list(range(1,N+1))for _ in range(M): i, j = map(int, input().split()) values[i-1:j] = values[i-1:j][::-1] print(*values) 이 코드는 다음과 같은 방법으로 풀었다.1. 바구니 갯수 N과 반복 횟수 M을 각각 입력 받는다.2. 1~N까지의 리스트를 만듦(values)3. i,j를 받는다. 4. 이후 이 값..


내 풀이1~10줄까지 숫자 주어짐.42로 나누었을 때, 나머지가 서로 다른 수인게 몇개인지 찾는 문제results = set()for _ in range(10): a = int(input()) a %= 42 results.add(a)print(len(results))이 문제는 자료형 중에서 중복을 허용하지 않는 set자료형을 사용하여 문제를 풀었다. 만약에 list 자료형을 쓰면 중복을 허용하기 때문에 값들을 리스트에 넣고 중복을 제거하는 번거로움이 있기 때문에 이를 사용하였다.결과: 정답또 다른 풀이arr = []for i in range(10): a = int(input()) if a%42 not in arr: arr.append(a % 42)print(len..


내 풀이교실에는 학생이 30명 존재, 과제는 28명이 제출 그 중 제출 안 한 학생 2명의 출석번호를 구하는 프로그램 작성 총 28줄입력 나머지 30이내의 다른 숫자 제외.results = []values = []for i in range(28): a = int(input()) results.append(a)results.sort()values = list(range(1, 31))for i in range(28): values.remove(results[i])print(values[0])print(values[1])일단 번호를 입력받는 results를 만들고 1~30까지 존재하는 values를 만들고 values의 값에 results의 값을 제거하는 방식으로 안낸 사람을 찾는 방법으로 이를 ..


N개의 상자가 있다. 거기에는 1번부터 N번까지 공이 있고 순서대로 숫자가 적혀있다. 도현이는 앞으로 M번 공을 바꾸러고 한다. 바꾸는 방법은 두 상자를 선택하여 공을 서로 교환하면 된다. 첫째 줄 N M두번째 줄 공을 교환하는 상자안에 공 box, count = map(int, input().split())result = [0] * boxfor i in range(box): result[i] = i+1for j in range(count): a, b = map(int, input().split()) result[a - 1] = b result[b - 1] = afor k in range(box): print(result[k], end=" ") 주어진 숫자들에 대해 지정된 위치의 ..


첫째 줄 N(바구니 개수) M(넣을 공 횟수)나머지 N 줄 i j k (M개의 줄에 걸쳐서 공을 넣는 방법: i번 바구니부터 j 바구니까지 k번 번호가 적혀있는 공을 넣는다는 뜻)ex) 2 5 6은 2번 바구니부터 5번바구니까지 6번 공을 넣는다는 뜻 1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력. 공이 들어있지 않은 바구니는 0을 출력 bucket, count = map(int, input().split())result = []result = [0] * bucketreal_count = 0while True: try: a, b, c = map(int, input().split()) for i in range(b - a + 1): ..


9개의 서로 다른 자연수가 주어짐 이들 중 최댓값을 구하고 몇 번째 수인지 구하기 result = []for i in range(9): a = int(input()) result.append(a)max_value = max(result)print(max_value)for i, value in enumerate(result): if value == max_value: print(i+1) 일단 받는 것은 9개 최댓값을 구하고 enumerate를 사용하여 인덱스를 찾는 방법으로 이 문제를 풀었다.결과: 정답또 다른 풀이numbers = []for i in range(9): a = int(input()) numbers.append(a)print(max(numbers))print(number..


내 풀이받는 값들을 리스트로 받고 max, min 함수를 사용하여 구현count = int(input())N = list(map(int, input().split()))print(max(N), min(N))결과: 정답또 다른 풀이cnt = int(input())numbers = list(map(int, input().split()))max = numbers[0]min = numbers[0]for i in numbers[1:]: if i > max: max = i elif i 파이썬 내장함수인 min, max 함수를 사용하지 않고 위과 같은 방법으로도 계산이 가능하다. 이 방식은 for함수를 사용하여 만들어놓은 max, min 변수들을 리스트 내 다른 위치에 있는 함수를 순서대로 ..


내 풀이정수 N개로 이루어진 수열 A와 정수 X 존재 A에서 X보다 작은 수를 모두 출력하는 프로그램 작성 첫번째줄 N X두번째줄 AN, X = map(int, input().split())A = list(map(int, input().split()))result = []for i in range(N): if A[i] A 리스트에 X 아래의 수를 result값에 넣어두고 그 값을 end=" "를 사용하여 밖으로 내보내는 방법을 사용하여 답을 구하였다.결과: 정답더 옳은 정답n, x = map(int, input().split())num = list(map(int, input().split()))for i in range(n): if num[i] 이 방식은 나의 방식에서 더 간추렸다. 이 방법에..


내 풀이첫째, 갯수. 두번째, 정수들. 세번째, v count = int(input())number = list(map(int, input().split()))v_number = int(input())v_count = 0for i in range(len(number)): if number[i] == v_number: v_count += 1print(v_count)일단 값을 모두 받아들이대, number의 경우 list로 값을 받아들었다. 그리고 count는 만약 number을 순회하고 있을 때, v_number과 같은 경우 count를 하여 이를 해결하였다. 결과: 정답더 옳은 정답n = int(input())n_list = list(map(int, input().split()))v ..


내 풀이A, B = map(int, input().split())while A == True and B == True: print(A + B) A, B = map(int, input().split()) A와 B가 나타나지 않는 줄을 처리하는 방법을 알지 못하여 이렇게 하였다. 하지만 이는 예외 처리로 간단하게 풀 수 있었다. 결과: 틀림정답while True: try: A, B = map(int, input().split()) print(A+B) except: break틀린 이유1. 예외 처리를 활용할 줄 몰랐다.try, except를 사용하여 만약 오류가 난다면 그대로 멈추어 이를 풀 수 있었다. 고찰질문: 이외에도 이 답을 구하는 방법은 없..


내 풀이숫자의 크기를 순서대로 정렬해서 그중 가장 가운데에 있는 값을 구하도록 만들면 된다. def solution(array): array.sort() mid_index = len(array) // 2 return array[mid_index]결과: 정답더 옳은 정답def solution(array): return sorted(array)[len(array) // 2] 이 정답은 sorted라는 함수를 사용하여, 더욱 더 간결하고 가독성이 높은 코드를 구현하였다. [ ]라는 것을 사용하여 리스트에 순서를 찾는 방법을 더욱 짧게 한 부분에서 아주 좋은 코드로 보여진다. 고찰sort와 sorted외에도 코딩테스트에서 중요하게 이야기되는 함수들은 무엇이 있을까?..


내 풀이분수를 더하는 것. 또한 최대공약수를 구하는 것이 중요하다. def solution(numer1, denom1, numer2, denom2): denom_total = denom1 * denom2 numer_total = numer1 * denom2 + numer2 * denom1 def s_find(a, b): i = min(a, b) # 두 수 중 작은 값부터 시작 while i > 0: # 1까지 탐색 if a % i == 0 and b % i == 0: # 공약수인지 확인 return i i -= 1 # 다음 값 검사 return 1 # 공약수가 없으면 ..

1. 순환 탐색 알고리즘이란?순환 탐색 알고리즘은 데이터가 순환 구조를 가지는 경우(Loop or Cycle), 이를 탐지하고 필요한 정보를 얻는 방법이다.순환 구조란 연결된 데이터들이 특정 지점에서 다시 시작점이나 이미 방문한 지점으로 돌아오는 형태를 의미한다. 이 알고리즘은 그래프, 연결 리스트, 배열 등 순환 구조를 포함한 다양한 문제에서 활용된다. 2. 순환 탐색의 주요 원리시작점에서 탐색: 데이터 구조의 임의의 지점(노드, 인덱스 등)에서 탐색을 시작한다.방문 기록: 이미 방문한 지점을 저장하여 중복 방문이나 무한 루프를 방지한다.순환 확인: 특정 시점에서 시작점으로 돌아오거나 이미 방문한 지점을 재방문하면 순환이 발생한 것으로 간주한다.종료 조건: 순환이 확인되거나 탐색 가능한 모든 데이터를 ..


내 풀이1~100까지 숫자가 하나씩 적혀있음 2이상 100 이하의 자연수 하나 정해 카드 준비준비한 카드 수만큼 작은 상자를 준비 게임 방법:준비된 상자에 카드 한 장씩 넣고, 상자 무작위로 섞음 -> 일렬로 나열 후 1번부터 번호붙힘1. 상자를 선택, 숫자카드 확인2. 확인한 카드에 적힌 번호에 해당하는 상자를 열어 안에 담긴 카드에 적힌 숫자 확인3. 계속해서 해야함4. 열어야 하는 상자가 이미 열려있을 때까지 반복 5. 만약 1번 상자를 열었다고 가정하자. 1번 상자를 제외하고 남는 상자가 없으면그대로 게임이 종료되며 이때 희득하는 점수는 0점 그렇지 않다면 남은 상자 중 다시 임의의 상자 하나를 골라 같은 방식으로 이미 열려있는 상자를 만날 떄까지 상자를 연다. 1번 상자 그룹에 속한 상자의 수..


내 풀이 공백이 있는 피라미드 쌓기import sysinput = sys.stdin.readlinen = int(input().rstrip())for i in range(1, n + 1): print(f"{(n - i) * ' '}{i * '*'}")결과: 정답더 옳은 정답N = int(input())for i in range(1, N + 1): print(' ' * (N - i) + '*' * i) 고찰현재 코드를 다른 언어(예: C, Java, JavaScript 등)로 구현한다면 어떤 차이가 있을까? C 언어#include int main() { int n; scanf("%d", &n); for (int i = 1; i Javaimport java.util.Scanner..


내 풀이반절 피라미드 쌓기import sysinput = sys.stdin.readlineT = int(input().rstrip())for i in range(1, T + 1): print(f"{i * "*"}")결과: 정답더 옳은 정답N = int(input())for i in range(1, N + 1): print('*' * i) 내가 만든 것의 문제점은 마지막에 print(f"")구문을 넣어 필요없는 부분을 만든 것이다. 이점을 생각하여 좋은 코드를 작성하도록 해야겠다. 고찰질문: 문제를 정확히 분석하는 과정"에서 중요한 요소는 무엇일까? 문제를 정확히 분석하는 과정에서 중요한 요소는 다음과 같다:1. 문제의 요구 사항 파악문제의 본질 이해: 문제에서 요구하는 핵심 기능이나 목표를 ..


내 풀이첫번째 줄 연산개수나머지 줄 연산할 숫자들단 Case #1: 1 + 1 = 2이렇게 적어야한다. import sysinput = sys.stdin.readlineT = int(input().rstrip())for i in range(1, T + 1): A, B = map(int, input().rstrip().split()) sys.stdout.write(f"Case #{i}: {A} + {B} = {A + B}\n")결과: 정답더 옳은 정답# 테스트 케이스의 개수 T를 입력받습니다T = int(input())# T번 만큼 반복합니다for i in range(T): # 각 줄에서 A와 B를 입력받습니다 # 입력받은 문자열을 공백을 기준으로 분리하여 각각 정수로 변환합니다 ..