본문 바로가기

전체 글31

[자료구조] Chapter2. Arrays and Structures(2) ※ 이 카테고리의 글들은 knu EK.Ryu 교수님의 수업을 듣고 나름대로 필자가 정리한 글입니다.※ 부족한 설명이 있거나, 잘못 알고 작성한 부분이 보인다면 편하게 댓글로 알려주시면 정말 감사하겠습니다😊2.4 Polynomials이 파트에서는 다항식의 덧셈을 구조체 배열을 사용하여 구현하는 것을 연습해 봅시다!아래 코드는 두 개의 다항식이 주어지면 더하고 결과를 출력하는 프로그램입니다.(1) #define과 #include 부분#define _CRT_SECURE_NO_WARNINGS#include #include #define MAX_TERMS 100#define COMPARE(x, y) (((x)  #define MAX_TERMS 100: 다항식에서 사용할 최대 항의 개수를 100으로 정의합니다... 2024. 10. 5.
[자료구조] Chapter2. Arrays and Structures(1) ※ 이 카테고리의 글들은 knu EK.Ryu 교수님의 수업을 듣고 나름대로 필자가 정리한 글입니다.※ 부족한 설명이 있거나, 잘못 알고 작성한 부분이 보인다면 편하게 댓글로 알려주시면 정말 감사하겠습니다😊2.1 Arrays 배열배열은 인덱스와 값 의 쌍으로 구성된 집합으로서, 정의된 각 인덱스는 그 인덱스와 관련된 값을 가집니다.배열의 추상 데이타 타입(ADT)은 아래와 같습니다. ※ADT(추상 데이터 타입)란? 객체의 명세와 그 연산의 명세가 그 객체의 표현과 연산의 구현으로부터 분리된 데이터 타입입니다. 쉽게 말해, ADT는 데이터와 그 데이터를 다루는 연산을 추상적으로 정의한 것으로, 구현 세부 사항에 구애받지 않고 데이터 구조를 다룰 수 있는 개념입니다. (1)  C언어에서의 배열먼저 1차원 .. 2024. 10. 1.
[백준 18115번] 수열과 쿼리 38 📖문제: 📙풀이:리스트를 사용해서 pop(), append()를 하며 문제를 푸니 시간초과가 발생했다.그래서 쿼리가 입력될 때 바로바로 연산을 처리할 수 있도록하니 문제를 쉽게 해결할 수 있었다. ✏️코드:'''https://www.acmicpc.net/problem/18917문제: 수열과 쿼리 38난이도: 실버3'''# 리스트를 사용하면 시간초과 발생# 리스트를 사용하지 않고, 문제를 풀 수 있는 방법 고민하기!!import syssum = 0xor = 0index = int(input())for _ in range(index): query = sys.stdin.readline().strip() if query[0] == '1': sum += int(query[2:]) .. 2024. 10. 1.
[백준 18115번] 카드 놓기 📖문제: 📙풀이:초기 코드에서 일정 규칙에 따라 숫자 카드가 쌓이는데, 문제에서 초기 코드를 알아내야 하기 때문에 거꾸로 생각하는 부분이 어려웠다.하지만 막상 방법을 알고 나니 정말 간단했다. 쌓여 있는 숫자 카드는 항상 위에서부터 1, 2, 3, 4, 5.. 순으로 같고, 1은 결국 마지막 규칙에 의해 쌓인 것이고, 2는 마지막 - 1 번째 규칙에 의해 쌓인 것이기 때문에 규칙의 순서를 뒤집어서 생각하면 된다.그리고 시간 복잡도를 줄이기 위해 덱을 사용했다.덱은 양쪽 끝에서 삽입과 삭제가 가능하고, 그 때 시간 복잡도가 O(1)로 매우 빨라 이러한 문제에 유리할 것 같다. ✏️코드:'''https://www.acmicpc.net/problem/18115문제: 카드 놓기난이도: 실버3'''import.. 2024. 9. 30.
[백준 1654번] 랜선 자르기 📖문제: 📙풀이:처음 알고리즘을 짤 때는 가능한 큰 수(가지고 있는 모든 랜선의 합 / 필요한 랜선 개수)에서 -1씩 빼가며 찾는 방법으로 코드를 짰다.하지만 바로 시간초과..그래서 이진 탐색으로 절반씩 범위를 줄여가면서 가능한 가장 큰 랜선 토막의 길이를 찾는 방법으로 코드를 짰다. 시간복잡도: O(log(N)) ✏️코드:'''https://www.acmicpc.net/problem/1654문제: 랜선 자르기난이도: 실버2'''# 이진 탐색으로 풀어야 됨!import sysline_num, need = map(int, input().split())lines = []for _ in range(line_num): lines.append(int(sys.stdin.readline()))possible.. 2024. 9. 29.
[백준 2108번] 통계학 📖문제: 📙풀이:입력받는 숫자들을 리스트가 아닌 딕셔너리 형태로 저장하여 빈도 수를 함께 저장했다.딕셔너리를 정렬하는 방법이 기억이 안나서 구글링을 했다... ✏️코드:'''https://www.acmicpc.net/problem/2108문제: 통계학난이도: 실버3'''import sysdef myround(num): a = int(num) b = num - a if b >= 0.5: return a + 1 elif b  🔗링크:https://www.acmicpc.net/problem/2108 2024. 9. 28.