포스팅 리스트
-
알고리즘
[웰노운 프로젝트] 위상 정렬
웰노운(Well-Known) 프로젝트문제를 보자마자 "아~ 웰노운이네요" 라고 외칠 수 있는 실력을 목표로 알고리즘을 하나하나 정복해 나가는 프로젝트 다른 시리즈들[웰노운 프로젝트] LIS위상 정렬 (Topology Sort)example)작업 T1, T2가 있을 때, T2를 수행하기 위해서는 반드시 T1이 선행되어야 한다. 이 때, 모든 작업을 완료하기 위한 작업 순서는 T1 -> T2이다.여기서 적절한 작업 순서를 구하기 위해 위상 정렬 알고리즘을 활용할 수 있다.좀더 복잡한 예시의 경우 정답은 여러 개가 될 수 있다.위상 정렬은 그래프 알고리즘의 한 종류로, 주로 작업의 선행관계를 고려한 최적 작업 순서를 계산하는데 활용된다.(경우에 따라 그래프의 사이클 여부를 판단하는데 활용될 수 있다)아주 중요..
-
알고리즘
[웰노운 프로젝트] LIS
웰노운(Well-Known) 프로젝트문제를 보자마자 "아~ 웰노운이네요" 라고 외칠 수 있는 실력을 목표로 알고리즘을 하나하나 정복해 나가는 프로젝트 다른 시리즈들[웰노운 프로젝트] 위상 정렬LISLIS(Longest Increasing Subsequence, 최장 증가 부분 수열) 는 대표적인 DP 알고리즘 중 하나이다.이 글을 진지하게 읽는 사람은 이미 LIS가 어떤 것인지에 대해서는 대략적으로 알 것이라 생각하므로 설명은 생략한다. 먼저 나의 자존심을 채워줄 수 있는 문제 2개를 함께 보면서 진행해보자. (사실상 같은 문제다)[BOJ-11053] 가장 긴 증가하는 부분 수열[BOJ-11722] 가장 긴 감소하는 부분 수열 아무것도 모르거나 DP에 익숙하지 않거나 상태로 이 문제를 처음 맞닥뜨리면 완..
-
알고리즘
입력범위별 시간복잡도 대충 정리
문제에 적용 가능한 자료구조 또는 알고리즘들을 추릴 수 있는 방법이 있다.(1초에 대충 1억번 정도 명령을 수행할 수 있다고 가정, N은 어디까지나 대충 잡은 기준이다)N O(N!) 수준의 알고리즘부터 생각하면 된다.N O(2^N) 수준의 알고리즘부터 생각하면 된다.N O(N^3) 수준의 알고리즘부터 생각하면 된다.N O(N^2) 수준의 알고리즘부터 생각하면 된다.N O(N log N) 수준의 알고리즘부터 생각하면 된다.N O(N) 수준의 알고리즘부터 생각하면 된다.N O(log N) 또는 O(1) 수준의 알고리즘부터 생각하면 된다.https://www.bigocheatsheet.com/자료구조, 정렬 알고리즘별 시간복잡도를 알 수 있다.핵심은 입력 범위를 통해 통과될 수 있는 정답 알고리즘의 범위를 좁..
-
풀이
[BOJ-9625] BABBA
[BOJ-9625] BABBA코드는 C++20 기준으로 작성되었습니다. 이 포스트의 목적은 스스로 문제를 해결하는 과정을 글로 담아 시행착오를 줄이고자 작성되었습니다. 도움이 될지는 모르겠으나 더 효율적인 접근 및 풀이 방법이 언제든지 존재할 수 있으니 참고만 해주세요.풀이 과정태그를 사전에 알고 있는 상태로 풀었습니다.B -> BAA -> B이므로, 0 A & B[i] : 버튼을 i번 눌렀을 때 A & B의 개수(i = 0) A[1] = 0, B[0] = 0A[i] = B[i - 1]B[i] = A[i - 1] + B[i - 1] A는 모두 'B'로 변해버리며 사라지고 'B'에 의해서 1개 생성되므로 이는 곧 버튼을 1회 누르기 전 'B'의 개수와 동일하다고 볼 수 있습니다.B는 모두 'BA'로 변하면..
-
풀이
[BOJ-9354] It Is Cold
[BOJ-9354] It Is Cold코드는 C++20 기준으로 작성되었습니다. 이 포스트의 목적은 스스로 문제를 해결하는 과정을 글로 담아 시행착오를 줄이고자 작성되었습니다. 도움이 될지는 모르겠으나 더 효율적인 접근 및 풀이 방법이 언제든지 존재할 수 있으니 참고만 해주세요.풀이 과정태그를 사전에 알고 있는 상태로 풀었습니다. 엣지 케이스가 있기 때문에 문제를 잘못 이해하고 풀다가 틀리기 쉬운 문제입니다. 그림을 그리고 보면 매우 쉬운 문제이지만 글로만 보면 오해할 수 있는 부분들을 몇가지 적어보았습니다.기본적인 사항이지만 정답이 integer 범위를 초과할 수 있어 더 큰 자료형으로 코드를 작성하는 것이 필요합니다.문제에 기재되어있는대로 최종적으로 바람이 닿지 않을 경우 0을 출력하여야 합니다. (..
-
풀이
[BOJ-1904] 01타일
[BOJ-1904] 01타일코드는 C++20 기준으로 작성되었습니다. 이 포스트의 목적은 스스로 문제를 해결하는 과정을 글로 담아 시행착오를 줄이고자 작성되었습니다. 도움이 될지는 모르겠으나 더 효율적인 접근 및 풀이 방법이 언제든지 존재할 수 있으니 참고만 해주세요.풀이 과정태그를 사전에 알고 있는 상태로 풀었습니다.가장 먼저 수열이 형성되는 패턴을 찾기 위해 N = 5까지 직접 계산하여 시각화 하였습니다.혹시 여기서 패턴이 보이시나요? 직접 타이핑 하며 계산한 저는 눈이 조금 아팠지만 금방 패턴을 찾을 수 있었습니다. 먼저, N이 1 증가할 때마다 N - 1인 경우의 모든 2진 수열의 뒤에 1을 붙이는 것을 볼 수 있습니다.즉, N = 3일 때 0 0 1 이라는 수열이 있었다면 N = 4일 때 1을 ..
-
풀이
[BOJ-2156] 포도주 시식
[BOJ-2156] 포도주 시식코드는 C++20 기준으로 작성되었습니다.이 포스트의 목적은 스스로 문제를 해결하는 과정을 글로 담아 시행착오를 줄이고자 작성되었습니다.도움이 될지는 모르겠으나 더 효율적인 접근 및 풀이 방법이 언제든지 존재할 수 있으니 참고만 해주세요.풀이 과정DP 태그를 먼저 본 뒤 문제를 풀었습니다. 이 문제 자체를 이해하는 것은 크게 어렵지 않아 우선 큰 생각 없이 바텀업 방식의 1차원 DP 테이블을 구성하였습니다.그리고 점화식이 잘 구성되었다고 가정할 때 DP 테이블에 값이 어떻게 채워지는지 그려보았습니다. (문제를 풀 당시 바로 그리지는 않았지만, 최종 점화식을 구하는 과정에서 큰 도움이 되었습니다. dp에 익숙해지기 전에는 꼭 그림을 먼저 그려봐야 할 것 같습니다.) 먼저 러프..
-
개발
[C#으로 웹 개발] 1. 개발 환경 세팅 및 샘플 프로젝트 생성
0. 계기 : https://reallemonjuice.tistory.com/154 완전 기초 수준의 C#과 컴공 지식만을 가지고 무작정 웹 개발을 시도하는 과정을 써내려가는 포스팅 입니다. 가급적 Microsoft Learn 자습서를 기준으로 포스팅이 진행됩니다. Visual Studio 세팅 (2023.03.10 기준) 보통 웹 개발 하시는 분들은 Visual Studio Code를 사용하시는 걸로 알고 있지만 저는 익숙하고 순정 상태로도 강력한 Visual Studio IDE를 사용하기로 하였습니다. Visual Studio IDE 다운로드는 링크만 남기고 스킵하겠습니다. 링크 : https://visualstudio.microsoft.com/ko/downloads/ Visual Studio Too..
-
개발
[C#으로 웹 개발] 0. 계기
완전 기초 수준의 C#과 컴공 지식만을 가지고 무작정 웹 개발을 시도하는 과정을 써내려가는 포스팅 입니다. 가급적 Microsoft Learn 자습서를 기준으로 포스팅이 진행됩니다. 왜 C# (.NET) 으로 웹 개발을 하는가 몇 년전에 단순히 웹 개발이라는 분야에 대한 호기심으로 React와 Spring을 배워 본 적이 있었습니다. React의 경우에는 JS로 개발을 하게 되는데, Python, JS 등 스크립트 계열 언어에 대한 안 좋은 기억이 많아 처음부터 제 마음속에 패널티를 가지고 체험을 시작하였습니다. 그런데 체험을 하다보니 뭔가 세팅해야할게 굉장히 많았고 오류도 굉장히 많이 발생하였습니다. Spring은 비교적 저에게 친숙한 Java로 개발을 할 수 있었는데, React와 마찬가지로 생각보다..
-
풀이
[BOJ-27650] 마법박스
풀었던 문제들을 어떤 과정을 통해 풀게 되었는지 단순히 기록하는 포스팅 입니다.결과는 정답이지만 풀이 과정이 효율적이지 않거나 올바르지 않을 수 있다는 점 참고 부탁드립니다.또한, 풀이 과정이 특정 언어(Java)에 치우쳐 진행될 수 있습니다.문제 개요문제 출처 : https://www.acmicpc.net/problem/276502023 성균관대학교 프로그래밍 Open Contest에 출제된 문제 입니다.풀이이 문제는 인터렉티브 문제입니다.입출력을 테스트하기 까다롭기 때문에 먼저 문제를 풀 방법을 확실하게 생각하고 코드를 작성하였습니다. 저는 가장 먼저 이 지문에 대해 생각을 하였습니다.질문은 최대 20번 할 수 있고.. 질문에 대한 답변을 기반으로 하여5,000,000개의 수 중에서 마법박스에 들어있..