본문 바로가기

분류 전체보기88

[C] 프로그램 개발과정 / C언어란 / 기본 소스코드 분석 컴파일러 기반 언어들이라면 개발에 공통적으로 설계 - 원시코드 작성 - 컴파일 - 링크의 단계를 거친다. 설계 : 아이디어에 대해 구체적인 로직을 문서화하는 단계. 가장 중요하고, 오래 걸리는 단계이다 원시코드 작성 : C언어로 코드 작성 ('원시'코드는 컴퓨터가 이해할 수 없는 고수준 언어로 작성한 코드) 컴파일: 원시코드를 컴퓨터가 이해할 수 있는 binary 코드로 변환하는 과정. 컴파일된 파일을 목적코드(object file) 이라고 한다. 링크 : 컴파일 된 목적코드 파일들을 서로 연결하고, 필요한 라이브러리들을 연결하여 하나의 실행파일을 생성하는 단계 컴퓨터는 예나 지금이나 이진수 기반의 기계어만 인식할 수 있었기에 초기 프로그래밍은 0과 1로 구성된 기계어로 이루어졌다. 이에 불편함을 느낀 .. 2022. 10. 21.
Week04. 알고리즘 주차를 마치며 | 시작이 반이다 ! 어느새 4주 간의 알고리즘 주차가 끝났다 ㅠㅠㅠㅠ 그 간의 생활을 성과로 표현하면 아래 스크린샷 만한 게 없지... '백준 골드'라는 키워드로 구글링을 해보면 대개 골드 달성에 2달 ~ 6개월 이상 소요되는 거 같은데, 정글에서 알고리즘 주차를 시작하고 3주 반(4주차 중간)이 되었을 때 골드를 찍었다. 나는 커리큘럼 상의 문제 중에서 난이도가 높은 몇 문제들은 건너뛰었는데도 골드를 달성했고, 문제를 다 푼 친구들은 이미 3주차에 골드를 가볍게 찍었다. 지난 4주간 376번의 답안 제출과 숱한 틀렸습니다, 시간초과, 메모리초과 등등을 걸쳐 145번의 맞았습니다 를 얻었다 ㅠ 자 그러면 이런 quantitative figures 말고, 지난 일주일 그리고, 지난 4주간에 대한 나의 소감은...? W04 |.. 2022. 10. 20.
백준 11049. (PyPy3 1등 먹은 풀이!) 행렬체인곱셈 | Python 다이나믹 프로그래밍 🔔 문제 설명은 백준 문제 링크로 대신합니다 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 수많은 시도 끝에 성공한 행렬체인곱셈 문제.. CLRS 책을 한참 읽고서야 이해했고, 문제를 푸는 데도 한참이 걸렸던 문제다. 이 문제는 제대로 상세히 기록을 해 둬야 할 것 같다!! 처음에는 하향식 + 메모이제이션으로 풀었는데 계속해서 시간초과가 났다. 이 문제를 먼저 맞춘 팀원들은 다 상향식으로 풀었다고 해서 상향식으로 다시 풀었다. 사실 CLRS에서 상향식으로 푸는 부분은 도저히가 이해가 안가서 하향식.. 2022. 10. 19.
백준 11047. 동전 0 | Python | 그리디 🔔 문제 설명은 백준 문제 링크로 대신합니다. 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 특정 금액을 최소한의 동전 개수로 만들기 위해서는 단위가 큰 동전부터 최대한 많이 사용해야 한다. 큰 동전을 최대로 사용하고, 남은 나머지를 또 최대한으로 쓰고, 그 나머지를 또 최대한으로 쓰고... 이런 식으로 반복해나가다가 나머지가 0이 되는 시점이 오면 계산을 끝낸다. 예를 들어 1300원이 있고, 이를 500원, 100원, 50원짜리 동전을 '최소.. 2022. 10. 15.
백준 1904. 01타일 | Python | 메모이제이션 & 바텀엄(상향식) 접근 방식 풀이 🔔 문제 설명은 백준 문제 링크로 대신합니다 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 피보나치 수열이라 메모이제이션 방식과 바텀업 방식 둘 다로 풀어보았는데, 메모이제이션 방식은 재귀 깊이 설정(setrecursionlimit())을 안 하거나 충분한 깊이로 하지 않으면 RecursionError가 발생하고, 충분한 깊이로 하면 메모리 초과가 발생한다. 문제에서 N의 범위가 1 ≤ N ≤ 1,000,000 라고 해서 재귀 깊이를 10**7로 했더니 메모리가 초과되고, 줄였더니 런타임에러가 발생했다. 결국 메.. 2022. 10. 15.
백준 2748. 피보나치 수 2 | Python | 메모이제이션 & 바텀엄(상향식) 접근 방식 풀이 🔔 문제 설명은 백준 문제 링크로 대신합니다 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 피보나치 수열의 n번째 원소를 출력하는 문제이다. 이번 주 학습 주제인 동적프로그래밍과 그리디에 대해서 먼저 이론을 공부하고 문제를 풀었는데, 피보나치 수열은 동적프로그래밍의 너무나도 대표적인 예시라서 공부를 하는 과정 중에 먼저 코드를 이해할 수 있었고 문제를 금방 풀 수 있었다. 동적프로그래밍의 두 방식 메모이제이션(memoization)과 바텀업(bottom-up) 방식 모두로.. 2022. 10. 14.
반응형