본문 바로가기

728x90

분류 전체보기

[백준알고리즘] 6549번: 히스토그램에서 가장 큰 직사각형-C++ 6549번: 히스토그램에서 가장 큰 직사각형 (acmicpc.net) 6549번: 히스토그램에서 가장 큰 직사각형 입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ www.acmicpc.net 보니까 2년 전에 풀다가 말았던 문제인 것 같다. 파이썬으로 풀려고 시도했던 흔적이 남아있다. 플레티넘 5라고 해서 너무 쉬운 방법은 안 풀릴 거 같았다. 조금 생각해서 스택을 이용해 푸는 방법을 생각했고, 약간 지저분해 보여 조금 아이디어를 가다듬고 문제를 풀었다. 사실 바로 풀릴지 모르고 했는데 돼서 놀랬다. 해당 문제에 대한 게시판.. 더보기
[디자인패턴][구조패턴] 플라이웨이트 Flyweight - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Flyweight pattern 플라이웨이트 패턴은 많은 수의 가벼운 임시 객체를 스마트 참조로 사용하는 것을 말하며 그러한 객체들을 플라이웨이트라고 부른다. 종종 토큰, 쿠키라고 부르기도 한다. 플라이웨이트 패턴은 많은 수의 매우 비슷한 객체들이 사용되어야 할 때 메모리 사용량을 절감하는 방법으로서 자주 사용된다. 사용자 이름 대규모 멀티 플레이가 지원되는 온라인 게임을 생각해보자. 중복 이름이 허용된다면, 흔한 이름이 생성될 때마다 중복되는 공간을 낭비하게 된다. 대신에 이름을 한 번만 저장하고 같은 이름을 가진 사용자들은 그 이름을 포인터로 갖게 할 수도 있다. 이것은 적지 않은 메모리 절감이다. 더 나아가 이름을 "성"과.. 더보기
[디자인패턴][구조패턴] 퍼싸드 Facade - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Facade pattern 퍼싸드(퍼사드)는 프랑스어로 출입구가 있는 건물의 앞부분을 말한다. 이번 패턴은 특이하게 터미널에 대한 이야기를 통해 설명을 진행한다. 먼저 운영 체제에서 제공하는 터미널/콘솔의 CLI와 금융권의 금융 데이터 문자 렌더링은 미묘한 차이가 있따. 터미널은 어떻게 동작할까? 터미널 윈도의 첫 번째 구성 요소는 버퍼다. 버퍼에 렌더링할 문자들이 저장된다. 버퍼는 보통 char/wchar_t 타입의 1차원 또는 2차원 배열로 만들어진다. 버퍼는 보통 현재의 입력 라인을 가리키는 어떤 표시를 갖는다. 그 표시를 이용해 버퍼가 가득 찼을 때, 항상 새로운 라인을 할당하는 것이 아니라 가장 오래된 라인부터 덮어쓰면.. 더보기
[백준알고리즘] 11444번: 피보나치 수 6 -C++ [백준알고리즘] 11444번: 피보나치 수 6 -C++ 11444번: 피보나치 수 6 (acmicpc.net) 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 골드 난이도면서 정답 비율이 높길래 되게 쉬운 문제인 줄 알았다. 근데 난생처음 보는 풀이를 보고 따라 풀었다. 이 문제를 푸는 방법은 2가지가 있다고 한다. 행렬 곱을 이용한 방법과 방정식을 이용한 방법이다. 아래는 방정식으로 문제를 풀었다. 문제를 푸는 방식은 백준 블로그의 글을 참고했다. 피보나치 수를 구하는 여러가지 방법 (acmicpc.net) 피보나치 수를 구하는 여러가지 방법 피보나치 수는 다음과 같이 정의되는 수열입니.. 더보기
[백준알고리즘] 1802번: 종이 접기 -C++ [백준알고리즘] 1802번: 종이 접기 -C++ 1802번: 종이 접기 (acmicpc.net) 1802번: 종이 접기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 1000보다 작거나 같은 자연수이다. 둘째 줄부터 T개의 줄에 각각의 종이가 어떻게 접혀있는지가 주어진다. 종이의 정보는 문자열로 주어지며, 1 www.acmicpc.net 문제만 읽었을 때는 되게 어려운 문제라고 생각했다. 문제를 푸는 방법을 찾았을 때도 시간 초과가 괜찮을지 걱정했었는데 여유로운 시간이었다. 정답 비율만 보고 살짝 어려운 문제인가 싶었는데 실버 문제는 실버 문제였다. 분할 정복으로 분류되어 있는데, 분할 정복인가.. 싶긴 하다. 문제 풀이 문제의 내용은 사실 대부분이 불필요한데 괜히 길다. 아무튼 원룡이가 막 접었.. 더보기
[IT/리뷰] Clean Code Clean Code(클린 코드) : 네이버 도서 (naver.com) Clean Code(클린 코드) : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 저번 에 이어서 를 읽었다. 이 책에서도 에 대한 내용을 소개하고 있는 만큼 책은 훌륭했다. 그런데 역시 꽤나 좋았다. 다만 개인적으로는 에서도 단계적으로 깔끔한 코드를 작성하는 방법을 설명해준 것이 더 좋았다. 도 단계별로 설명을 해주기는 하나, 이 더 직관적이었던 것 같고 그만큼 더 쉽게 읽혔다. 는 읽는데도 좀 오래 걸렸다. 그리고 첫 장부터 커닝험, 부치, 비야네 등 유명한 사람들이 정의한 클린 코드를 설명해주는데 이런 것들이 신기했다. 이 사람들끼리는 서로 친할까 궁금하기도 하고 공부할 때 들어본 .. 더보기
[백준알고리즘] 2470번: 두 용액 -C++ [백준알고리즘] 2470번: 두 용액 -C++ 2470번: 두 용액 (acmicpc.net) 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 골드 5의 문제다. 정답 비율도 낮아서 생각보다 어렵나 하고 풀었는데 생각보다 훨씬 쉽게 풀리긴 했다. 예전에 비슷한 느낌의 문제를 푼 적이 있던 것 같은데, 그 덕분인지는 모르겠다. 전부터 골드 5의 문제들이 적당히 난이도 있고 풀기에 좋았던 것으로 기억한다. 그래서 진짜 어려운 문제는 아니었을 수도 있다. 문제 풀이 문제에서는 여러 .. 더보기
[백준알고리즘] 10867번: 중복 빼고 정렬하기 -C++ [백준알고리즘] 10867번: 중복 빼고 정렬하기 -C++ 10867번: 중복 빼고 정렬하기 (acmicpc.net) 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net 사실 이번 문제는 굉장히 쉬운 문제다. 정렬 알고리즘이라고 해서 풀려고 했는데, 너무 민망할 정도의 문제다. 그래서 글을 따로 작성하지 않으려다가 그냥 기록용으로 남긴다. 문제 풀이 문제에서 요구하는 조건 중에 주목할 것은 오름차순 정렬과 중복을 제거하는 것이다. 가장 먼저 생각이 든 것은 C++의 set를 이용하는 방식이다. set는 JAVA의 HashSet과 유사한 개념이다.. 더보기

728x90