본문 바로가기

프로그래밍

(10)
[객체지향 프로그래밍] 프로그래밍 패러다임이란 무엇인가? 프로그래밍 패러다임 패러다임(영어: paradigm)은 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념이다. 따라서 '프로그래밍 패러다임'은 프로그램을 어떻게 인식하는가에 대한 틀을 제공한다. 프로그래밍 패러다임에는 여러가지가 있지만 대표적으로 명령형 프로그래밍( imperative programming ), 절차지향 프로그래밍(Procedural programming), 객체지향 프로그래밍(Object-Oriented Programming) 등이 있다. 명령형 프로그래밍은 자연 언어에서의 명령법이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이..
[POCU 아카데미] COMP2300 어셈블리 프로그래밍 수강 후기 POCU 아카데미 컴퓨터 공학을 제대로 배울 수 있는 온라인 교육 기관이다. 자세한 설명은 아래 링크 참고. https://pocu.academy/ko/About POCU 소개 - POCU 유능한 소프트웨어 엔지니어 및 설계자이자, 유수 공사립 대학의 교수였던 김포프가 창립한 POCU는 탑 프로그래머가 평생 커리어를 유지하려면 반드시 알아야 하는 컴퓨터 공학 수업을 제공하는 pocu.academy 수강 계기 학교에서 '컴퓨터 구조' 수업을 들을 때 어셈블리 코드 예시를 많이 봤는데, 예시를 공부하면서 어셈블리 언어를 잘 이해하면 컴퓨터 친화적인 코드를 짤 수 있겠다라는 생각이 들었고 어셈블리 언어를 깊게 공부하겠다고 마음 먹었다. 마침 POCU 아카데미에서 어셈블리 언어 수업을 런칭하였다. POCU 아카..
[프로그래머스] 순위 / 플로이드-워셜 알고리즘 / C++ 풀이 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/49191 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 전략 문제에 따르면 실력이 더 좋은 선수가 항상 이긴다고 한다. 예를 들어, A가 B를 이기고 B가 C를 이긴다면, A는 항상 C를 이긴다. 이를 그래프로 표현한다면 A에서 B로 가는 경로가 있다면 A에서 C로 가는 경로가 있다고 표현할 수 있다. 다시 말해 B를 중간 경로로 하여 A에서 C로 갈 수 있는 것이다. 그래프에서 '갈 수 있다'는 것은 곧 '이긴다'는 의미가 된다. 플..
[프로그래머스] 네트워크 / DFS, BFS 그래프 탐색 / C++ 풀이 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 전략 주어진 벡터 computers는 인접 행렬로 두 컴퓨터 간의 연결 상태를 표현한다. 각 컴퓨터를 노드로 하여 방문하지 않은 노드에 대해 그래프 탐색을 수행한다. 서로 연결된 노드를 탐색해가며 방문했음을 표시한다. 한 번의 그래프 탐색 호출 시 서로 연결된 모든 노드를 탐색하게 되므로 하나의 네트워크를 찾게 된다. 따라서 그래프 탐색을 호출한 횟수가 네트워크의 수 이다. C++..
[X86 어셈블리] FPU 프로그래밍 / 8087 / 주요 명령어 정리 X87과 인텔 8087 X87은 부동소수점 연산에 관련된 X86 아키텍처 명령어 집합이다. 지금은 CPU가 자체적으로 부동소수점 명령어를 처리하지만 먼 과거에는 보조 프로세서(Co-Processor)가 처리했다. 이러한 보조 프로세서 중 하나가 인텔 8087이다. 8087의 레지스터 st0부터 st7까지 총 8개가 있으며 각각 80비트이다. st0을 최상위로 하는 스택의 구조로 사용된다. 예를 들어 두 개의 피연산자를 더하는 FADD 명령어는 피연산자가 명시되어있지 않은 경우 st0과 st1의 값을 더하여 st0에 저장한다. 명령어 데이터 전송 명령어 명령어 뜻 풀이 동작 FILD Integer Load 정수를 st에 push 한다 FIST Integer store 정수를 메모리에 복사한다 FISTP I..
[프로그래머스] 단속카메라 / 탐욕법, Greedy / C++ 풀이 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42884 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 전략 주어진 구간에 대한 배열 routes를 정렬하고 앞에서부터 구간이 겹치게 단속 카메라를 설치할 수 있는 구간을 찾는다. 주어진 예시 [[-20, -15], [-14, -5], [-18, -13], [-5, -3]] 로 생각해보자. 위를 정렬하면 [[-20, -15], [-18, -13], [-14, -5], [-5, -3]]이고, 정렬된 routes를 앞에서부터 살펴보면서 구..
[프로그래머스] 선입 선출 스케줄링 / 이분탐색, binary search / C++ 풀이 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12920 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 전략 각 코어가 작업을 받을 수 있는 시각인지 확인하며 n개를 처리할 때까지 반복문을 돌리면 시간 초과가 난다. 일의 개수는 최대 50,000이고 코어의 수는 최대 10,000 개다. 최악의 경우 5억( = 50,000 * 10,000)회의 반복문이 돌기 때문에 효율성 테스트를 통과할 수 없다. 따라서 더 효율적인 방법을 생각해야 한다. 문제에서 '한 코어에서 작업이 끝나면 작업이..
[백준] 2468 안전 영역 / BFS, 깊이 우선 탐색 문제 링크 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 풀이 전략 가능한 모든 수위에 대해 물에 잠기는 지점과 안전한 지점을 표시한다. 서로 연결된 안전한 지점을 BFS를 통해 찾는다. BFS가 호출된 수가 안전 영역의 개수이다. 코드 #include #include #include using namespace std; int board[101][101]; int land[101][101]; //-1 : 침수, 1 : 안전지역 int N; int ..