본문 바로가기

분류 전체보기243

C언어 고급] 13🚀변수의 영역과 데이터 공유 목차 변수의 사용 영역 지역변수 = 자동 변수 - 함수 내 사용. auto (=생략 가능). local variable은 storage class (변수를 사용 범위와 존재 기간에 따라 나눈 것) 중 하나. 지역변수의 특징 다른 함수에서 사용 못함 이름이 같아도 선언된 함수가 다르면 각각 독립된 저장 공간을 가짐 장점 메모리 효율성 디버깅에 유리 블록 안에서 사용하는 지역 변수 특정 블록 안에 변수를 선언하면 범위가 블록 내부로 제한. 블록이 중첩된 경우 사용 가능한 변수가 둘 이상이면 가장 가까운 블록에 선언된 변수를 사용. (안팎에 다 있으면 안의 것을 사용.) #include void assign10(void); void assign20(void); int a; // 전역 변수 선언 int main.. 2024. 4. 4.
AI 자존심 건드리기 당연히 되는 작업을 시켰는데 안 할 때가 있다. 열받아서 자존심을 긁어 보았다. 2024. 4. 1.
C언어 고급] 12🚀문자열 목차 문자열과 포인터 - 컴파일 과정에서 문자열은 첫 번째 문자의 주소로 바뀜. = 배열을 출력하는 것과 같은 과정을 거침. 문자열 상수 구현 방법 - 문자열의 크기는 일정하지 않아서 char 배열로 보관, 문자열 상수가 있던 곳에는 배열의 위치 값 사용. - 주소로 접근해서 문자열을 바꾸면 안 됨. 컴파일은 되어도 운영체제가 상수를 읽기 전용 메모리 공간에 저장하므로 운영체제에 따라 강제종료할 수 있음. char 포인터로 문자열 사용 - 문자열은 결국 주소 = char포인터에 대입 사용 가능. 첫 주소만 저장, 포인터 연산으로 전체 문자열 사용 가능. 같은 문자열을 여러 번 사용하면 컴파일러가 하나의 문자열만 저장하고 주소를 공유하도록 번역함. = 최적화 = 컴파일러 종류에 따라 다름. 같은 문자열을 .. 2024. 3. 31.
🐨BOJ쿼드트리 목차 쿼드트리 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 50634 31488 24067 62.248% 문제 흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다. 주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의.. 2024. 3. 30.
C언어 고급]🚀문자 목차 A. ASCII 와 문자 입출력 함수 1. ASCII 2. scanf 3. getchar, putchar B. Buffer 사용 입력 함수 1. scanf 문자입력 과정 2. scanf 함수 리턴값 활용 3. getchar 사용 문자열 입력 4. 입력 버퍼 지우기 C. 정리 하기 1. 요약 2. 활용 3. 궁금한 점 A. ASCII 와 문자 입출력 함수 1. ASCII 분류문자 상수 아스키 코드 값출력할 때 종류 문자상수 코드값 출력할 때 숫자 문자(10개) '0' ~ '9' 48 ~ 57 문자 출력 대문자(26개) 'A' ~ 'Z' 65 ~ 90 문자 출력 소문자(26개) 'a' ~ 'z' 97 ~ 122 문자 출력 특수 문자(33개) ' ' (공백), '!', '&', ... 32, 36, 38.. 2024. 3. 29.
🐨BOJ#1697 숨바꼭질]🙄BFS(feat. collections) 문제 보기 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 아이디어 딱 봐도 dp로 풀 수 있을 것 같지만... 머리가 아파서(=어려워서) 수빈이가 도착할 수 있는 위치가 분기로 갈라지는 트리를 만들어서 풀기로 했다. 가장 적은 횟수(빠른 시간)에 동생을 찾아야 하기 때문에, 트리의 깊이가 가장 얕은 게 정답이다. 그래서 dfs로 탐색한 뒤 깊이를 비교하는 것 보다 bfs를 사용해야 한다고 생각했다. 그리고 분기.. 2024. 3. 29.
C언어 고급] 🚀배열과 포인터 목차 A. 배열과 포인터의 관계 1. 배열명으로 배열 요소 사용하기 2. 배열명 역할을 하는 포인터 3. 배열명과 포인터의 차이 3. 포인터의 뺄셈과 관계 연산 B. 배열을 처리하는 함수 1 . 배열의 값을 출력하는 함수 2 . 요소 개수가 다른 배열도 출력하는 함수 3 . 배열에 값을 입력하는 함수 3 . 배열에 값을 입력하는 함수 C. 정리 하기 1 . 요약 2 . 활용 3 . 궁금한 점 A. 배열과 포인터의 관계 -컴파일러는 첫 번째 배열의 주소를 쉽게 사용하도록 배열명을 컴파일 과정에서 첫 배열 요소 주소로 바꿈. 자료형에 따라 첫 주소에서 크기만큼 건너뛰며 요소에 접근 가능. ____1. 배열명으로 배열 요소 사용하기 - 주소는 정수처럼 보이지만 자료형 정보를 갖고 있는 특별한 값. = 자유로운.. 2024. 3. 28.
🐨백준-파이썬] 2630번 색종이 만들기& 1780번 종이의 개수🤔분할 정복 알고리즘(Divide and conquer algorithm) https://namu.wiki/w/%EB%B6%84%ED%95%A0%20%EC%A0%95%EB%B3%B5%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 분할 정복 알고리즘 분할 정복(Divide and Conquer)은 여러 알고리즘의 기본이 되는 해결방법으로, 기본적으로는 엄청나게 크 namu.wiki https://ko.wikipedia.org/wiki/%EB%B6%84%ED%95%A0_%EC%A0%95%EB%B3%B5_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 분할 정복 알고리즘 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 분할 정복 알고리즘(Divide and conquer algorithm)은 그대로 해결할 수 없는 문제를.. 2024. 3. 27.
클러스터를 만들고 있습니다. 2024. 3. 27.
🐨백준-파이썬]# 13305번 주유소(그리디 알고리즘) 이 문제는 그리디인 것을 알겠다. 지금까지 나온 최저가를 경신해가면서 다음도시까지 주유하면 된다. 어차피 더 좋은 대안이 있어도 도착해야 닿을 수 있으니 지금까지의 최대 이익만 생각하면 되는 문제라고 할 수 있다. 1. 유가경신 2다음도시 이동(거리와 곱해서 가격에 더하기) ''' 4 2 3 1 5 2 4 1 ''' n = int(input()) distance = list(map(int, input().split())) oil_price = list(map(int, input().split())) best_price = float('infinity') cost = 0 for i in range(n-1): if oil_price[i] < best_price: best_price = oil_price[i].. 2024. 3. 25.
🐨백준 파이썬]# 1541번-잃어버린 괄호(그리디 알고리즘) "-" 뒤에 있는 수는 모두 더한다. eval을 쓰면 00009같은 것 때문에 에러가 난다. def calc(exp): return sum(map(int,exp.split("+"))) expression = input() if "-" in expression: a = expression.split("-") front = calc(a[0]) back = [calc(x) for x in a[1:]] result = front - sum(back) else: result = calc(expression) print(result) 그리디라고 하는데.... 이렇게밖에 방법이 안 떠오른다 ㅠㅠ 이게 왜 그리디인지 알아보자. 주어진 코드는 먼저 입력된 수식에서 "-" 기호를 기준으로 분리하여, 각 부분의 합을 계산한.. 2024. 3. 24.
🐨알고리즘] 비트 필드를 활용한 다이나믹 프로그래밍 비트 필드를 활용한 다이나믹 프로그래밍 다이나믹 프로그래밍은 복잡한 문제를 더 작고 관리 가능한 부분 문제로 나누어 해결하는 방식입니다. 이 방법은 문제의 중복 계산을 피함으로써 효율적인 문제 해결이 가능하게 합니다. 하지만, 많은 다이나믹 프로그래밍 문제는 상태 공간의 크기가 크기 때문에, 메모리 사용량이 문제가 될 수 있습니다. 여기서 비트 필드를 사용하면 상태를 효율적으로 표현하고 메모리 사용을 줄일 수 있습니다. 비트 필드란? 비트 필드는 데이터를 비트 단위로 표현하는 방법입니다. 각 비트는 0 또는 1의 값을 가질 수 있으며, 여러 상태나 플래그를 하나의 정수로 표현할 수 있습니다. 이는 메모리를 절약하고, 비트 연산을 통해 빠르게 데이터를 처리할 수 있는 장점이 있습니다. 비트 연산의 기초 비.. 2024. 3. 24.