본문 바로가기

Programming/Python19

18. 보물, 나이순 정렬, 국영수, 문자열 내 마음대로 정렬하기, 파일명 정렬 보물 파이썬에서 내림차순 정렬을 하려면? : reverse=True 옵션을 추가하면 됨my_list = [3, 1, 4, 1, 5, 9, 2]sorted_list_desc = sorted(my_list, reverse=True)print(sorted_list_desc) # 출력: [9, 5, 4, 3, 2, 1, 1] 최종코드N = int(input())A = list(map(int, input().split()))B = list(map(int, input().split()))sorted_A = sorted(A)sorted_B = sorted(B, reverse=True)S = [sorted_A[i] * sorted_B[i] for i in range(N)]print(sum(S)) 나이순 정렬 .. 2025. 9. 22.
17. 정렬, 비교정렬, 기수정렬, 카운팅정렬 정렬 문제 정렬 문제는 무엇을 위해?섞여 있는 데이터(리스트)를 어떤 기준(키)에 따라 오름차순/내림차순으로 다시 배열하는 것 : 예를 들어 입력이 빨간색, 파란색, 초록색 등이라고 할 때 정렬할 기준이 무엇이 될까?임 : 즉, 원소들의 모음 : 학생 성적 리스트, 파일 목록, 날짜들… : 이 입력이 될 수 있음 : 반대로 출력은? : 지정한 기준대로 순서가 정리된 같은 원소들의 모음 그렇다면 비교만 되면 정렬 가능일까?그냥 서로 비교할 수 있다고 해서 곧바로 ‘정렬 가능한 데이터’가 되는 건 아님 : 그럼? : 최소, 최대가 존재해야함 : 즉, 제일 작은 것/큰 것이 잡혀야 정렬이 의미가 있어지고 끝까지 수렴 : 일관된 순서(정렬 기준)가 성립해야 함 : 정렬 알고리즘은 원소들 사이에 "모순 없는 전.. 2025. 9. 21.
16. (딕셔너리, 집합) 완주하지 못한 선수, 영어 끝말잇기, 캐시, 수강신청, 사이클단어 완주하지 못한 선수 해당 문제는 "완주하지 못한"이 중점 : 즉, "참가자" 명단을 중심으로 생각 : 참가자 명단 - 완주자 명단을 모두 수행하고 : 참가자 명단에서 총정리하여 남는 사람을 추출하면 될 것def solution(participant, completion): participant_dict = {} for i in participant: if i in participant_dict: participant_dict[i] += 1 else: participant_dict[i] = 1 for j in completion: participant_dict[j] -= 1 if participant.. 2025. 9. 16.
15. (딕셔너리, 집합) 숫자카드 2, 서울에서 김서방 찾기, 베스트셀러, 놀라운 문자열 숫자카드 2 N = int(input())cards = list(map(int, input().split()))M = int(input())queries = list(map(int, input().split()))new_queries = []for i in range(M): new_queries.append(cards.count(queries[i]))print(new_queries)하지만 위와같이 하면 시간 초과가 걸림 : count()는 리스트 전체를 처음부터 끝가지 세면서 검사하기 때문에 O(N) : 근데 그걸 M번 반복하니까 전체 복잡도는 O(NxM) : 문제에서 M, N은 50만이 최대인데 파이썬은 보통 1초에 10^7(1억)정도 연산 가능 : N × M = 500,000 × 500,000.. 2025. 9. 14.
14. 해시, 해시테이블 해시 정의, 개념해시 함수(hash function) : 임의 길이의 키(key)를 고정된 범위의 정수로 매핑하는 함수 h: Key → {0, 1, …, m-1} : 즉, 긴 정보(예: 문자열, 학생이름, 주민번호 같은 키)를 짧은 숫자 하나로 바꿔주는 함수 : 이 숫자를 보통 0 ~ (m-1) 범위로 만든 다음 그 숫자를 주로 배열의 인덱스로 사용하여 칸 번호처럼 씀 : 특히 카운팅, 중복 체크, 빠른 탐색에 쓰임 이렇게 하면 데이터를 빠르게 저장하거나 검색할 때 유용함 : 키를 그대로 비교하는 대신 “번호표”로 먼저 자리부터 찾는 느낌임 : 즉, 키들을 가능한 한 균등하게 분포시켜, 해시테이블에서 탐색/삽입/삭제를 평균 O(1)로 만들기 위함특징입력이 길어도 출력은 보통 고정 크기 정수(예: 32비.. 2025. 9. 13.
13. 괄호, 스택 수열, 요세푸스 문제, 쇠막대기, AC, 화학식량 괄호 class Stack: def __init__(self): self.stack = [] def push(self, data): self.stack.append(data) def pop(self): if not self.stack: return False return self.stack.pop()s = input()parentheses = { '(' : ')', '{' : '}', '[' : ']' }ss = Stack()valid = Truefor ch in s: # 파이썬에서 in 연산자는 딕셔너리에 대해 기본적으.. 2025. 9. 7.
12. 파이썬 기초(7) : 선형 자료구조 총 정리 배열 vs 연결리스트 vs 스택 vs 큐 데이터 저장 및 접근 방식에 차이가 있음을 알게됐음배열 : 연속적인 메모리 공간에 데이터를 저장하고 인덱스를 사용하여 빠르게 접근할 수 있지만, 삽입/삭제가 비효율적연결 리스트 : 각 노드가 다음 요소를 가리키는 방식으로 연결되어 있어 유연한 삽입/삭제 가능 : 하지만, 특정 위치의 데이터에 접근하려면 처음부터 순차적으로 탐색해야 함스택 : LIFO(후입선출) 방식 큐 : FIFO(선입선출) 방식으로 데이터를 처리함시간 복잡도 비교 (배열 : 파이썬 리스트 기준) 평균최선최악접근 (index 접근)O(1)O(1)O(1)탐색 (값 찾기)O(n)O(1)O(n)삽입 (맨 뒤)O(1)O(1)O(n)삽입O(n)O(1)O(n)삭제 (맨 뒤)O(1)O(1)O(1)삭제O(n).. 2025. 8. 18.
11. 파이썬 기초(6) : 복잡도, 선형 자료구조 시간복잡도, 공간복잡도 문제를 해결하기 위한 일련의 절차나 방법인 알고리즘의 성능을 평가할 때 사용하는 개념 : 간단하게 시간복잡도는 알고리즘의 수행 시간을 평가하며, 공간복잡도는 알고리즘 수행에 필요한 메모리 양을 평가함 : 즉, 복잡도가 낮을 수록 좋은 알고리즘이라 얘기할 수 있음둘다 보통 빅-O 표기법(Big O notation)을 사용하여 표현함 : 가장 오래 걸릴 수 있는 상황 : 최악의 경우를 가정하고 알고리즘의 성능을 평가함 : O(n)은 입력 크기 n이 증가할수록 처리 시간이 n에 비례하여 증가 시간복잡도특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미 : 같은 결과를 가지는 프로그래밍 소스라도 작성 방법에 따라 걸리는 시간이 다름 : 즉, 시간이 적게 걸리는 것이 좋은 소스 공.. 2025. 8. 18.
10. 다이얼, 빙고, 크로아티아 알파벳, 다트게임 다이얼 alphabet = input("대문자 단어를 입력하세요 : ")time = 0for i in alphabet: if i == 'A' or 'B' or 'C': time += 3 elif i == 'D' or 'E' or 'F': time += 4 elif i == 'G' or 'H' or 'I': time += 5 elif i == 'J' or 'K' or 'L': time += 6 elif i == 'M' or 'N' or 'O': time += 7 elif i == 'P' or 'Q' or 'R' or 'S': time += 8 elif i == 'T' or 'U' or 'V':.. 2025. 8. 16.
9. TODO 리스트를 클래스로 구현하기 index = int(input("\n위의 저장된 TODO리스트 중 수정하고 싶은 리스트는 몇 번째인가요? 숫자로 입력해주세요. : ")) - 1 if index >= len(todolist): print("해당하는 리스트가 없습니다.") else: field = input("\n해당 리스트에서 수정하고 싶은 필드를 알려주세요(이름, 설명, 장소, 시간) : ") if field in todolist[index]:기존 코드는 위와같이 todolist를 받고 인덱스로 길이를 먼저 검사하고 필드를 받는 형식이었음 : mod를 함수로 만들려고 하지만, 이전의 구조상 번거로움 : todolist를 현재 클래스 인스턴스로 정의해놓.. 2025. 8. 14.
8. 파이썬 기초(5) : 클래스 https://docs.python.org/ko/3.9/tutorial/classes.html 9. 클래스 — Python 3.9.23 문서9. 클래스 클래스는 데이터와 기능을 함께 묶는 방법을 제공합니다. 새 클래스를 만드는 것은 객체의 새 형 을 만들어서, 그 형의 새 인스턴스 를 만들 수 있도록 합니다. 각 클래스 인스턴스는docs.python.org 클래스란? : 데이터와 기능을 함께 묶는 구조 : 클래스를 정의 : 객체(인스턴스)를 생성 가능 : 각 인스턴스는 자신만의 상태(attribute)를 가짐 : 메서드(method)를 통해 상태를 변경 가능class Dog: def __init__(self, name, age): # 생성자 (초기 상태 설정) self.name.. 2025. 8. 8.
7. 행렬의 덧셈과 곱셈, TODO 리스트 만들기 행렬의 덧셈 zip() 함수 사용def solution(arr1, arr2): answer = [] for i in range(len(arr1)): answer.append([x + y for x, y in zip(arr1[i], arr2[i])]) return answermatrix1 = [[1, 2], [2, 3]]matrix2 = [[3, 4], [5, 6]]print(solution(matrix1, matrix2))zip() 함수는 같은 위치에있는 요소끼리 묶을 수 있음 : zip(arr1[i], arr2[i]) : 같은 행(i번째)의 원소들을 zip을 사용하여 짝지음 : arr1[0] = [1, 2], arr2[0] = [5, 6.. 2025. 8. 2.
6. 자릿수 분리하기, 별 찍기, FooBar, 콜라츠의 추측, 더하기 사이클 자릿수 분리하기 0 이상의 정수가 주어졌을 때, 정수를 앞자리부터 차례대로 끊어서 출력하고, 마지막 줄에는 각 자릿수의 합을 출력하라. 예를 들어 1023이 입력된다면, 1, 0, 2, 3, 6을 출력하면 된다. set 함수는 애초에 순서도 보장 x, 중복된 값 없앰 : for문의 대상은 문자열도 가능 : 리스트, 문자열, 튜플 등 자료형의 항목이니깐 : input() 함수로 받은 값은 str 문자열 타입 : 아래와 같이 간단하게 작성 가능N = input("0 ≤ N ≤ 100000000 범위에서 정수 N을 입력하시오 : ")sum = 0for i in N: print(i) sum = sum + int(i)print(sum)# 입력이 1023이면# 1# 0# 2# 3# 6하지만, 만약 입력.. 2025. 7. 28.
5. 파이썬 기초(4) : 자료구조 https://docs.python.org/ko/3.9/tutorial/datastructures.html 5. 자료 구조 — Python 3.9.23 문서5. 자료 구조 이 장에서는 여러분이 이미 배운 것들을 좀 더 자세히 설명하고, 몇 가지 새로운 것들을 덧붙입니다. 5.1. 리스트 더 보기 리스트 자료 형은 몇 가지 메서드들을 더 갖고 있습니다. 이docs.python.org 5.1. 리스트 더 보기 append(x)리스트 끝에 x를 추가함 extend(iterable)iterable의 모든 항목을 리스트에 덧붙임 insert(i, x)인덱스 i 위치에 x를 삽입 remove(x)x와 같은 첫 번째 항목을 삭제 pop([i])i 위치 항목을 삭제하고 반환 : 인덱스를 생략하면 .. 2025. 7. 27.
4. 1~N : 정수의 합, 짝수는 더하고 홀수는 빼기 프로그램 1부터 N까지의 합을 구하는 프로그램 #sum() 사용def sum_of_integers(n): N = sum(range(1, n+1)) return Nprint(sum_of_integers(5))# while문 사용def sum_of_integers(n): i = 1 sum = 0 while i 1부터 N까지 짝수는 더하고 홀수는 빼는 프로그램 # 1def sum_even_sub_odd(n): even = 0 odd = 0 for i in range(1, n+1): if i % 2 == 0: even = even + i else: odd = odd + i return even - .. 2025. 7. 21.
3. 파이썬 기초(3) https://docs.python.org/ko/3.9/tutorial/controlflow.html 4. 기타 제어 흐름 도구 — Python 3.9.23 문서4. 기타 제어 흐름 도구 방금 소개한 while 문 외에도, 파이썬은 다른 언어들에서 알려진 일반적인 흐름 제어문들을 사용하고, 나름의 변형을 가하고 있습니다. 4.1. if 문 아마도 가장 잘 알려진 문docs.python.org 4.1. if 문 if … elif … elif … 시퀀스는 다른 언어들에서 발견되는 switch 나 case 문을 대신함 4.2. for 문 파이썬의 for 문은 C 등에서 사용하는 전통적인 for 문과 다르게 동작 : C는 반복 변수를 통해 반복 범위, 조건, 증가값을 직접 지정 : 파이썬은 리스트, .. 2025. 7. 21.
2. 파이썬 기초(2) https://docs.python.org/ko/3.9/tutorial/introduction.html>> 와 …)의 존재 여부로 구분됩니다: 예제를 실행하기 위해서는 프롬프트가 나올 때 프롬프트 뒤에 오는 모든 것들을 입" data-og-host="docs.python.org" data-og-source-url="https://docs.python.org/ko/3.9/tutorial/introduction.html" data-og-url="https://docs.python.org/ko/3.9/tutorial/introduction.html" data-og-image=""> 3. 파이썬의 간략한 소개 — Python 3.9.23 문서3. 파이썬의 간략한 소개 다음에 나올 예에서, 입력과 출력은 프롬프트.. 2025. 7. 16.
1. 파이썬 기초(1) https://docs.python.org/ko/3.9/tutorial/appetite.html 1. 입맛 돋우기 — Python 3.9.23 문서1. 입맛 돋우기 여러분이 컴퓨터를 많이 사용한다면, 결국 자동화하고 싶은 작업을 발견하게 됩니다. 예를 들어, 많은 텍스트 파일들을 검색-수정하고 싶거나, 사진 파일들을 복잡한 방법으로 이docs.python.org 1장: 입맛 돋우기 컴퓨터를 사용해 자동화하고 싶은 작업 : 파일 검색, 수정, DB, 프로그램 제작 등 : 개발자? : C/C++/Java : 파이썬과 달리 기본적인 기능 외에는 import 해야 하는 경우가 많음 : 파이썬은 print 함수를 import 안해도 가능 : 즉, 라이브러리를 갖고 작업해야만 함 : 일반적인 코드 작성/테스.. 2025. 7. 15.
0. 파이썬 기초 (0), 달팽이 배열 https://docs.python.org/ko/3.9/tutorial/index.html 파이썬 자습서 — Python 3.9.23 문서파이썬 자습서 파이썬은 배우기 쉬우면서도 강력한 프로그래밍 언어입니다. 효율적인 자료 구조와 객체 지향 프로그래밍에 대한 간단하고도 효과적인 접근법을 제공합니다. 파이썬은 우아한docs.python.org 서문 객체지향 프로그래밍데이터를 객체로 묶고, 객체들 간의 상호작용을 중심으로 프로그램을 구성하는 방식 : 코드 재사용성과 유지보수성이 높음 : 예시 언어 : Python, Java, C++ 등절차지향 프로그래밍프로그램을 순서대로 실행되는 명령(절차)들의 집합으로 보는 방식 : : 함수 단위로 코드 구성, 명확한 흐름 제어 : 예시 언어 : C, Pascal .. 2025. 7. 15.