본문 바로가기

전체 글

(94)
[자료구조] 큐(Queue).(C언어) INDEX 1. 개요 2. 배열? 연결리스트? 3. 구현 3-1. Node(노드) 3-2. Queue(큐) 3-3. initQueue(초기화) 3-4. isempty(비어 있는지 확인) 3-5. enqueue(데이터 삽입) 3-6. dequeue(데이터 반환) 3-7. printQueueContents(큐에 있는 원소들 출력) 3-8. 주석 제거한 전체 코드 1. 개요 FIFO(First In First Out) 방식을 취하고 있는 자료구조이다. 스택(Stack)의 업그레이드 버전이라고 생각하면 쉽다. 왜냐하면 입출구를 공유하는 스택과는 다르게 큐는 입구와 출구가 다르기 때문이다. 큐는 단방향 구조인 동시에 rear부분에서 enqueue(데이터 삽입)와 front부분에서 dequeue(데이터 출)가 발생..
[C언어] What is scanf()? INDEX 1. 함수 원형 2. 주소 연산자(&) 3. 형식 지정자 4. 위험성 printf 함수와 함께 가장 많이 접한 함수 중 하나일 것이다. 사용자로부터 값을 입력받을 수 있는 꽤나 유용한 함수이기 때문에 gets(), fgets()와 더불어 PS를 할 때 가장 많이 사용되는 함수임은 과언이 아니다. 입력받는 데이터의 구분은 줄 바꿈, 탭, 띄어쓰기가 있다. 하지만 scanf는 정확히 어떤 원리로 동작할까? 1. 함수 원형 #include int scanf(const char* restrict format, ...); 원형과 인자의 원리(고정 인수, 가변 인자)는 printf와 크게 다르지 않다. 데이터를 입력받기 위해서는 일단 데이터 타입에 해당하는 크기의 메모리는 먼저 할당받아야 하기 때문에 형..
[백준]_11758번 : CCW(파이썬 and C언어) 11758번: CCW 첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다. www.acmicpc.net 제목 그대로 ccw알고리즘 저격 문제이다. 심지어 ccw알고리즘을 구현하기만 하면 해결되는 문제이기 때문에 ccw가 무엇인지만 알고 있으면 그렇게 어려운 문제는 아니다. 질문 게시판에서 보이는 ccw를 사용하지 않은 풀이를 보니 왜 알고리즘을 공부해야 하는지 깨닫게 되었다. 전략 ccw는 Counter Clock Wise알고리즘을 뜻한다. ccw알고리즘은 복잡한 코드 대신 외적을 사용하여 세 점의..
[알고리즘] CCW(Counter Clock Wise) INDEX 1. 개요 2. 외적 3. 사용 1. 개요 외적을 이용해 3개의 점 사이의 관계를 구할 때 사용되는 알고리즘이다. 이 알고리즘을 보고 놀랐던 게, 컴퓨터는 생각보다 인간이 쉽게 할 수 있는 일들을 못한다. 예를 들어 좌표 평면에 존재하는 좌표들의 관계를 파악함에 있어 인간의 인지 능력이 훨씬 직관적으로 정확하다. ccw알고리즘은 세 가지 상황에 대해 세 가지 값을 return한다. 시계 방향 → ccw0 2. 외적 외적과 연관이 깊은 알고리즘이고 사실 외적의 원리 그 자체를 이용한다고 해도 과언이 아니다. 외적은 일반적으로 2개의 3차원 공간의 벡터에 대한 연산이다. 스칼라가 나오는 내적과 달리 외적은 크기(스칼라)와 방향(벡터)을 모두 얻을 수 있다. 사실 ccw에서는 방향만이 관심 대상이다..
[C언어] What is printf()? INDEX 1. printf의 f 2. 왜 int형으로 선언되었을까? 3. (const char* restrict format,...)의 의미는? 4. 가변 인자란? int printf(const char* restrict format, ...) printf()는 함수이다. C언어를 접한 초창기 때부터 항상 사용했던 것이라 함수라는 의심을 아예 하지 못하였다. 하지만 지금 와서 다시 생각해 보면 그냥 헤더 파일에서 지원해 주는 것들은 전부 다 함수이다. 인자를 통해 특정 목적을 수행해 주는 함수, 즉 printf() 또한 같은 원리로 동작한다. 하지만 구체적으로 어떻게? 먼저 printf()함수란 뭐인지 알아보자. "사용자가 프로그램과 대화하기 위해 사용하는 함수(입출력, I/O)에서 Output 역할을..
[2023 CCSSAA SWgnature 대회] : 첫 도전과 장벽, 그리고 배운점 서사 대학교 1학년 1학기를 마친 시점에서 여름방학을 맞이하게 되었다. 하지만 1학기 때 너무 학점에만 목매었던 나머지 교육과정에서 정해진 좁은 통로로만 내 체력과 한계를 끌어들이고 있지 않는가 의문이 들었다. 또한 수강하였던 8개의 과목 중에서 A+을 7개, C+을 1개 받고 나서 나는 눈 양옆이 가려진 경주마였다는 것을 종강과 함께 깨달았다. 참고로 공부를 소홀히 해서 C+를 받은 것이 아니다. 앞으로 개봉할 영화에 대해 스크린을 몇 개 배정해야 할지 판단해 주는 설계 모델을 만드는 팀프로젝트 중에 독감이 걸렸어도 빙빙 도는 머리를 쥐어짜가며 하루치 역할을 꾸역꾸역 해나갔고 팀 내 평가시간에서도 가장 일을 많이 한 팀원으로 평가받았다. 영화 관련 통계 자료를 분석해 가면서 유의미한 수학적 규칙들을 찾..
[백준]_1931번 : 회의실 배정(파이썬 and C언어) 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 가장 많은 회의 수를 배정하게끔 코드를 짜야한다. 그렇다면 어떤 접근을 해야 할까? 먼저 문제를 푸는 데에 있어서 중요한 값들은 무엇이 있을까. 일단 회의실 배정을 많이 해야 되기 때문에 회의의 시작 시간과 마침 시간이 최대한 적어야 한다. 또한 직전에 끝난 회의 시간과 그다음에 시작할 회의의 시간 차이가 적어야 한다. 하지만 어느 것이 가장 중요하다고 할 수 있는가? 그렇지 않다. 바로 동시에 동등히 중요하다는 것이다. 예제와 같은 답이((1,4), (5,7), (8,11), (12,14)) 어떻게 나오게 되었는지 생각해보자. (1,4)는 존재하는 모든 타임테이블 중에서 가장..
[백준]_7576번 : 토마토(파이썬) 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 다행히도 이 문제를 풀기 하루 전에 'Z', '유기농 배추', '쉬운 최단거리'와 같은 그래프 탐색 문제를 많이 풀어 단련이 되어 있는 상태로 푼 문제라 그런가 첫 번째 시도만에 초록색 "맞았습니다!!"를 띄워서 너무 기뻤다. 이번 해설에서는 기쁜 마음과 더불어 문제를 자세히 해설해 보겠다. 필자 또한 그래프 탐색 문제의 열쇠를 알기 전에 어떤 부분들이 이해가 안 되었는지를 중심으로 서술하고자 한다. 물론 이 분야를 다 깨우쳤다는 뜻은 절대 아니..