소프트웨어시스템설계 2023-03-06 수업정리
Flow Readability & Understandability Refactoring Readability local variable, constant등 코드 내의 각 요소들을 쉽게 파악할 수 있는 정도이다. readability가 좋은 코드는 변수 등의 위치를 바로바로 파악 가능하다. 일관성 있는 코드 스타일의 사용을 통해 readability를 보장할 수 있다. (줄바꾸기, 들여쓰기 등) 코드 스타일은 언어마다 정해진 코드 스타일이 있다. 이를 준수하면 된다. Under…
1927 - 최소 힙
난이도: 실버 2 날짜: 2023년 3월 3일 상태: Correct 추가 검토 여부: No 알고리즘 : queue, heap Solution 그냥 priority_queue를 선언하여 시키는 대로 풀면 되는 매우 간단한 문제이다. '\n'을 사용하지 않고 endl로 리턴했다가 시간초과를 한 번 봤다. 주의하자 code #include <iostream> #include <queue> using namespace std; int main() { ios::syn…
Github Page 구축
Zola 사용하기 Zola? Zola는 Static Site Generator(SSG)이다. Eleventy, Jekyll과 다르게 버전 관련 이슈가 없다. Hugo와 다르게 단순한 디렉토리 계층 구조를 가진다. 개인 Github Page등의 용도로 간단한 사이트를 생성하기에 적당하다. Overview Migrating to Zola Page 생성 및 실행 위의 Zola homepage에서 Docs를 참고하면 Zola의 설치를 어렵지 않게 할 수 있다. 원하는 경로에서 다음 명령어를 입…
1780 - 종이의 개수
난이도: 실버 4 날짜: 2023년 2월 28일 상태: Correct 추가 검토 여부: No 알고리즘 : 분할정복 Solution 혹시나 하는 마음에 chat GPT에게 문제를 그대로 주었다 한번에 정답을 맞췄다... 충격적이다. code #include <iostream> #include <vector> using namespace std; int N; vector<vector<int>> paper; bool is_all_same(int x…
프로그래밍언어론 2023-03-02 수업정리
Flow 안전한 프로그래밍 언어? 프로그래밍 언어에 대한 담론 프로그래밍 언어와 패러다임 추상화란? 프로그램, 프로세스, 프로세서 안전한 프로그래밍 언어? 교수님이 상담을 하는 상황을 가정해 보자, 상담을 위해 대기하고 있는 교수님의 오피스에 호랑이가 들어온다면? 매우 위험한 상황이다. 또한 한국어를 구사하지 못해 의사소통이 이루어지지 않는 사람이 들어오는 경우에도 상담이라는 목적을 달성할 수 없게 된다. 프로그래밍 언어에서도 마찬가지이다. 어떤 함수에 매개변수로 적절한 타입이 들어가지 않는…
webOS on Raspberry pi 4
webOS OSE(open source eddition) webOS의 오픈 소스 버전이다. 필요에 따라 커스텀 빌드가 가능하다. 빌드 시스템으로는 yocto를 사용하며, 이는 18.04이전 버전의 Ubuntu에서 동작한다. 본 글에서는 라즈베리파이4에 설치할 운영체제인 webOS OSE를 빌드하는 과정을 설명한다. 준비물 18.04 이하 버전의 ubuntu(VM 안됨) 이후 버전으로 빌드를 시도하면 yocto가 에러뜬다. 본 빌드에서는 Ubuntu 18.04.6 LTS를 사용하였다. 개인…
1697 - 숨바꼭질
난이도: 실버 1 날짜: 2023년 2월 28일 상태: Correct/Retry 추가 검토 여부: Yes 알고리즘 : BFS, DFS, DP, Graph solution K가 N보다 작을 경우 N은 K로 이동하기 위해 한 칸씩 뒤로 가는 경우밖에 없다. 따라서 K가 N보다 작거나 같은 경우에 대해서는 예외 처리를 한다. 이제 나머지 경우인 K가 N보다 큰 경우에 대해서만 생각한다. N이 K까지 도달하기 위해서는 한 칸 앞으로 가거나 뒤로 가는 연산을 적절히 한 후 가능한 경우 2배 연산까지 …
1764 - 듣보잡
난이도: 실버 4 날짜: 2023년 2월 28일 상태: Correct 추가 검토 여부: No 알고리즘 : set solution set에 듣도 못한 사람들을 추가한다. 보도 못한 사람들이 set에 포함되어 있다면 이를 듣도 보도 못한 사람들의 set인 nhs에 추가한다. nhs의 원소들을 vector컨테이너 ans에 저장한다. ans벡터를 sort한 후 조건에 맞게 출력했다. code #include <iostream> #include <vector> #include …
1620 - 나는야 포켓몬 마스터 이다솜
난이도: 실버 4 날짜: 2023년 2월 27일 상태: Correct/Retry 추가 검토 여부: No 알고리즘 : map solution 한동안 마주치지 않아서 endl의 사용이 시간초과를 야기한다는 것을 간과했다. 이 때문에 많이 틀렸다. 기본적으로 map 자료구조를 사용해서 해결할 수 있는 문제이다. 숫자를 key값으로 하는 map과 문자열을 key값으로 가지는 map두 개를 선언해서 문제를 해결했다. unordered_map을 사용하면 map을 사용했을 때보다 살짝 빠르게 문제 풀이가…
1676 - 팩토리얼 0의 개수
난이도: 실버 5 날짜: 2023년 2월 27일 상태: Correct 추가 검토 여부: No 알고리즘 : DP solution 이전 단계의 값에 특정 조건에 따라 추가 연산을 하면 되는 전형적인 DP문제이다. 5를 소인수로 몇 개를 가지고 있는지에 따라 0의 개수가 늘어나는 것이 핵심이다. (2는 2칸마다 1개씩 생성(?)되므로 충분하다.) 펙토리얼 연산이므로 현재의 수가 소인수로 가지는 5의 개수는 이전 단계의 값에 현 단계의 수에 대한 연산을 조건문을 통해 처리하면 된다. code #i…
1463 - 1로 만들기
난이도: 실버 3 날짜: 2023년 2월 26일 상태: Correct 추가 검토 여부: No 알고리즘 : DP solution 다이나믹 프로그래밍을 이용한다. 이전 단계의 정답을 다음 단계의 정답에 사용할 수 있는 문제이다. 1, 2, 3에 대해서만 미리 값을 정해준다. 그 이후의 값들에 대한 연산 결과는 해당 수를 3으로 나누거나, 2로 나누거나 1로 뺀 수의 연산값 중 가장 작은 값에 1을 더한 값이다. 물론 3으로 나누어떨어지거나 2로 나누어 떨어질 경우에만 해당 경우에 대해 고려하고 …
1389 - 케빈 베이컨의 6단계 법칙
난이도: 실버 1 날짜: 2023년 2월 24일 상태: Correct/Retry 추가 검토 여부: Yes 알고리즘 : BFS, Graph, 다익스트라 알고리즘, 플로이드 워셜 알고리즘 solution 1260번 문제와 마찬가지로 chat GPT의 코드를 이용하여 학습했다. chat GPT의 코드를 기반으로 문제의 조건에 맞게 일부 수정하여 제출하였다. 다익스트라 알고리즘의 구현은 BFS와 유사한 방식으로 구현되었다. 노드를 이동해 가면서 해당 노드의 인접 노드에 대해 정해진 규칙에 따라(다익…
1260 - DFS와 BFS
난이도: 실버 2 날짜: 2023년 2월 23일 상태: Correct/Retry 추가 검토 여부: Yes 알고리즘 : DFS, BFS, Graph solution DFS와 BFS를 조건에 맞게 구현하기만 하면 되는 문제이다. DFS, BFS의 개념은 자료 구조 수업에서 배웠다고 생각했지만 막상 구현하려고 하니 어려움이 많았다. 결국 구현의 핵심은 adjacency list와 visited list의 사용이었다. 각 블로그 및 교재를 참조하였으나 잘 이해가 되지 않아서… chat …
1107 - 리모컨
난이도: 골드 5 날짜: 2023년 2월 18일 상태: Correct 추가 검토 여부: No 알고리즘 : 브루트포스 solution 전역 배열 valid를 만들어서 고장난 버튼을 사용하지 못하도록 한다. possible() upward_search(), downward_search()를 구현하였다. possible은 고장난 버튼 때문에 한번에 채널을 누를 수 없다면 false, 고장난 버튼과 관계없이 채널을 누를 수 있다면 true를 반환한다. upward_search는 입력받은 인자에 대…
1074 - Z
난이도: 실버 1 날짜: 2023년 2월 17일 상태: Correct 추가 검토 여부: No 알고리즘 : 분할정복 solution 입력되는 배열은 행 또는 열의 크기가 $2^n$인 정사각형 형태의 배열이다. 이를 4개의 구역으로 나누는 방식을 재귀적으로 적용하였다. 4개로 나눠진 각각의 구역은 다시 4개의 서로 다른 구역으로 나눌 수 있다. 이 과정을 2*2배열까지 적용한다. 이 문제의 입력을 배열로 구현하면 메모리 초과의 발생이 자명하다. 이에 실제로 배열을 구현하지는 않고 배열의 인덱스를…