728x90
조회수 효자들
- VS code에서 C,C++의 format style을 커스텀하는 방법 VS code와 C++ 코드포스나 백준 문제를 풀면서 개발과 병행하기 위해 VS code를 C++ 에디터와 컴파일러로 사용하는데, formatting을 하다보면 불편한 경우가 있다. 예를들면 indent에 탭이 아닌 space를 사용하는데, 보통 개발에서 탭을 사용해야 이동이 편해지기 때문에 탭을 사용하는 나에게는 꽤나 불편한 일이 된다. 여기서 clang-format을 사용해야 하는데 구글링으로도 잘 안나와서 정리하고 넘어가려한다. 커스텀 방법 기본설정 먼저 커스텀을 하기 전에 C/C++가 기본 formatter로 지정이 되지 않은 경우 지정해주는 과정이 필요하다. prettier같은 것이 기본 formatter로 지정이 되어있으면 설정을 해도 안되기 때문이다. Ctrl + Shift + P → For..
- 백준 다이아 달성 후기, 나와 PS 다이아를 찍었다. 2021년 7월 13일에 15964 문제를 풀면서 시작한 백준이 어느덧 다이아까지 왔다. 1년 반 정도 걸렸다. 문제 당 제출 수가 상당히 많은데, DP나 그리디가 뭔지도 모를 때나 자료구조에 대한 개념이 하나도 없을 때 침착하게 배울 생각은 안하고 무작정 달려들어 얻어 터지느라 그랬다. 레이팅=실력이냐? 하면 어느 수준부터 다들 아니라 생각할 것이고 나 또한 그렇다. 그냥 오랜 기간 관심을 둔 분야에서 성과를 낸 것 같아 뿌듯해 후기를 적어본다. 레이팅 올리는 데에 도움이 많이 된 방법을 소개해볼테니 관심있으면 읽어보시라. 1. 브실 : 무엇보다 문제에 얻어터지기. 간혹 남의 풀이를 보라는 말이 있는데, 자기가 아직 브실골이고 골드 문제가 안 풀린다면 프로그래밍 사고에 도움이 되는 문..
- Next.js에서 api를 쓰는 이유 Next api? 웹 개발을 할 때는 Express & EJS를 이용해 프레임워크 없이 사이트를 만들곤 한다. 그런데 최근 SPA (single page application)의 장점을 깨닫고 한 달쯤 전부터 Next라는 프레임워크를 사용해보고 있는데, 풀리지 않는 궁금증 중 하나가 왜 api를 사용하냐? 하는 것이다. 예를 들면 json 파일을 읽거나 쓸 때, 그냥 fs 쓰면 안되나? 싶은데 그게 안된다는 걸 오늘 정확히 알았다. Client vs Server 구글의 힘을 빌려 개발에 달려들다 보면 기초 지식이 많이 부족해지는데, 그 중 가장 중요한 개념이 client와 server를 구분하는 것이다. Client와 Server는 각각 프론트, 백으로 생각해도 되는데 이게 단순히 디자인이나 웹 구성의 ..
- 백준 10803, 정사각형 만들기 개요 문제 링크 플래 3, Greedy, DP N×M크기의 직사각형을 최소 개수의 정사각형으로 나누기 접근 내 하루를 앗아간 그리디 & 메모이제이션 DP문제, 사실 접근은 분할정복에 더 가까운 것 같다. 증명 시도했는데 처참히 털렸다. 시간날 때마다 도전해보고 성공하면 수정하려고 한다. 어디가 그리디인가? 싶을 수 있는데 N이 10000이니까 N^2을 돌리지 않게 하기 위해 그리디를 사용한다. 처음에는 N,M루프를 돌면서 왼쪽 위 정사각형을 하나 만들고 남은 L자 모양의 구간을 두 가지 방법으로 잘라서 최솟값을 구하는 방식으로 진행했다. 그런데 이 방법은 최선이 아니다. L자 모양을 두개의 직사각형으로 자르지 않는 것이 최선이 될 수 있는데, 아래 예시를 보자. N=72, M=35이다. 왼쪽 위 15만큼..
- 백준 13705, Ax+Bsin(x)=C 개요 문제 링크 다이아 5, 임의정밀도/큰 수 연산 Ax+Bsin(x)=C를 만족하는 x를 임의 정밀도를 고려해 구하기 접근 이분탐색을 사용하는 문제라고하면 두 가지 유형이 있는데, 하나는 실행 횟수를 줄이기 위한 문제이고 하나는 오차를 완벽히 구할 수 없는 문제이다. 이 문제는 후자에 속하는데, sin(x)의 오차가 문제가 원하는 수준의 오차보다 크게 발생한다. 이분탐색이면 왼쪽과 오른쪽을 잘 설정해야 하는데, Ax=C로 가정하고 구해도 되지만, sin의 범위는 -1부터 1까지라서 다음의 부등식이 성립한다. -B c; LF A,B,C,l,r,x; A=a,B=b,C=c; LF U=1000000, D=0.5; l = (C-B)/A; r = (C+B)/A; int t=80; while(t--) { x = (..
- 백준 13884, 삭삽 정렬 개요 문제 링크 실버 1, Greedy 삭제 후 삽입 실행 시 비내림차순이 되는 최소 실행 수 접근 너무 어렵게 구현한 것 같은데 일단 이렇게 했음. 1) 우선 핵심은 작은 수부터 뽑는다. 2) 그런데 작은 수가 여러개면 가장 뒤의 것을 뽑는다. 3) 만약 뽑은 수가 이전 수보다 더 크고 앞에 있다면 그 수부터 끝까지 뽑는다. 뭔 소린가 하니, 32345 -> 23453 -> 23534 -> 23345 (3번) 32345 -> 3M345 -> 3MM45 -> 3개 뽑음 a[1] -> a[2] -> a[0] 에서 걸리므로 a[0], a[3], a[4]를 뽑아주는 것이다. 뽑아줬다는 표시를 위해 뽑은 수는 2e9로 초기화한다. 추가로 아래 케이스를 보자. 3223223 -> 3222233 -> 2222333..
- Barycentric, Trilinear coordinate 개요 Geometry 삼각형과 관련된 점을 나타내는 새로운 좌표체계 접근 Barycentric, Trilinear 고등수학에서 삼각형의 오심에 대해 배운다. 외심, 내심, 무게중심, 수심, 방심인데, 외심 내심 무게중심을 제외하고는 잘 쓰지 않는다. 외심과 내심 무게 중심을 벡터를 이용해 일반화하려면 생각할 부분이 많아지는데, 이때 좌표계를 새로 정의해 나타내면 생각이 쉬워진다. 편의상 외심, 내심, 무게중심을 각각 O, I, G라고 하자. Barycentric coordinate, 무게중심 좌표는 이름의 무게중심과 달리 G만 나타내는 것은 아니고, 삼각형 내부의 점 P에 대해 ▵BPC, ▵CPA, ▵APB의 넓이의 비를 나타내는 좌표이다. $\alpha:..
- 백준 1208, 부분수열의 합 2 개요 문제 링크 골드 1, Bruteforce, Meet in the middle 40개 원소를 포함하는 수열의 부분수열의 합이 S가 되는 경우의 수 접근 SSP의 Meet in the middle을 쓰는 세 번째 문제, 1182와 이름도 문제도 똑같은데 왜 티어차이가 이렇게 심할까? 브루트포스의 방식의 차이 때문인데, 이 문제는 전형적인 Meet in the middle 문제니까 잘 알아두도록 하자. SSP를 모른다면 위에 링크된 SSP글을 꼭 읽어보자. 이게 무슨 개념인가 하니, 1182는 N개의 스위치를 가지고 포함/미포함을 선택하는 모든 경우를 따지는 문제였다. 이때 시간복잡도는 O(2^N)인데, 2^40은 대략 1000^4니까 시간에서 터진다. 이때 선택이 중복을 허용하지 않으므로 배열을 반으로..
- 백준 1071, 소트 개요 문제 링크 플래 5, Greedy a[i+1] != a[i]+1이면서 사전순으로 가장 앞서게 정렬하기 접근 그리디한 인간이 되자. 수를 꺼내서 출력한다고 생각할 때, 가장 작은수부터 꺼내는 것이 가장 유리하다. 이 수를 X라고 해보자. 꺼낼 수 없는 첫 번째 경우. X가 (이전 수)+1인 경우에는 X+1부터 시작되는 최솟값을 다시 구한다. 이게 왜 되느냐? X보다 작은 수는 없다. 그러면 다음 최선 선택지는 항상 X보다 크다. 꺼낼 수 없는 두 번째 경우이자 이 문제의 핵심. X와 X+1만 남은 경우이다. 예를들어 2,2,3,3만 남은 경우 2를 먼저 뽑을 수 없다. 어떻게 뽑아도 2뒤에 3이 오는 경우가 생긴다. 그럼 두 번째 경우를 커버하기 위해 X+1부터 최솟값을 구한다. 그 값을 T라 했을 ..
- 백준 5180, 피자! 개요 문제 링크 골드 3, Geometry 포함하는 특정점의 개수가 같고 크기가 같도록 원을 나누는 최대 개수 접근 요상한 애드혹 문제, 틀왜맞이 절로 나왔다. 이분탐색이나, 스위핑, 별의 별 방법을 다 생각해봤지만 N수가 적어서 그냥 for문을 돌면서 다 체크해주면 통과한다. 다 체크란 어떻게 하냐? n부터 2까지 조각을 쪼갤 건데, 시작을 0부터 2π/n까지 하고, 개수가 모두 같으면 조각수를 출력해주면 된다. 즉 4중 for문 돌려주면 된다. Pseudo code for (piece = n~2) angle_diff = 2pi/piece for (start = 0~angle_diff) for (i = 0~piece) piece_start = start + i * angle_diff piece_end ..
인생공부 시리즈
- 01. 악의 평범성과 인간의 존엄성 1. 악의 평범성 20대 초반이었던 나의 정체성을 흔들었던 질문은 사회의 소외계층의 일반적 특성에 대한 것이었다. 가난한 자는 교육받지 못한다. 교육받지 못한 자는 범죄를 저지른다. 이런 추론은 옳지 못한 것이라 배웠지만 내가 본 세상에선 합리적인 추론이었다. 결국 사회적 약자는 악인인가에 대한 질문은 내 정체성을 흔드는 것이면서 나의 가치관을 결정하는 중요한 질문이었다.여기에 명쾌한 해답을 내려준 것이 한나 아렌트의 악의 평범성에 대한 것이었다. 나치의 유대인 학살이 그저 군부 사회에서 성공하기 위해 상관에 충성하던 행위의 일부였음을 밝히며 사유하지 않는 인간은 누구든 악마가 될 수 있다고 했다. 2. 인간은 선한가? 악한가? 일반적으로 인간의 행위의 목적에 대해 논할 때는 성선설과 성악설이 중심이 된..
- 02. Giver를 위한 사회, 애덤 그랜트의 조직심리학 1. 기버, 테이커, 매처 이전 글에서 행위의 비물질적 목적추구와 의식적 반성을 지속하는 것을 사유라고 하였고, 사유하는 사람이 인류의 존엄성을 지키는 존재가 된다고 하였다. 오늘은 조금 어려운 얘기에서 벗어나 표상적인 사회에서의 실천적 사유의 방법론을 잘 제시해주는 애덤 그랜트의 조직심리학에 대해 말해보려고 한다. 기버, 테이커, 매처는 주고 받음의 양에서 비롯되는데, 객관적으로 남에게 내어주는 성격이라면 기버, 같다면 매처, 주는 것이 적다면 테이커가 된다. 2. 사유와 이타성 기버가 자본주의 사다리의 맨 아래와 위를 모두 차지하고 있다는 사실은 무언가를 내어주는 Give의 양가성을 보여준다. 나는 이러한 이타성에 타의성과 자의성, 반자의성이 있다고 생각한다. 단순히 돕는 것이 좋아서, 혹은 습관이 ..
- 03. 경쟁심이 만든 병든 사회 1. 경쟁심의 학습 한국은 빈곤과 투쟁의 시대를 겪었다. 부족했던 교육과 좁아지는 기회 늘어가는 나이 속에 사회는 마치 펜싱 경기처럼 찰나의 순간에 남을 찔러야 하는 생존을 위한 투기장이 되었다. 펜싱의 칼 끝에 서서 이 사회를 관통한 세대가 있다. 불의에 맞서 항거하던 세대이면서 젊을 때는 평균 성장률 10%대의 고성장 저개발 국가에서 무수한 기회를 누리고, 나이가 들며 변해가는 사회에서 좁아진 기회와 과도한 경쟁에 지쳐 세속적인 가치관을 가진 세대. 한때는 30대 80년대 학번 60년대생이라는 의미로 386세대라 불렸고, 그 다음은 586, 이제는 60대에 접어들며 86세대라 불리는 사람들, 우리 20대의 부모세대이다. 부모는 가치관을 제1유산으로 남긴다. 부모의 가치관은 자녀를 통해 답습된다. 30..
- 04. 공부를 해서는 안 된다 1. 쾌락과 한계효용 사람은 배움이 부족할 수록 주변 사람으로부터 자신의 삶을 채우려 든다. 인간의 돈, 명예, 능력은 유한하기 때문이다. 유한함은 쾌락의 속성이며, 쾌락에는 한계 효용이 있다. 쾌락은 인간에게 사유의 기회를 줄 뿐 그 자체가 사유가 될 수는 없다. 사유하지 않은 인간의 쾌락이 한계 효용을 다하면 그 자리에는 핑계와 합리화, 변명만이 남고, 추해지지 않으려고 발버둥 치며 누군가는 거짓말로 자신의 빈 부분을 채우고, 또 누군가는 주변인의 삶에 자신을 대입하며 살아간다. 어디 법원 판사가 5살짜리 아들에게 우리나라 사법계의 고충을 말할까? 혹은 국민들의 준법정신에 대해 말할까? 그저 피곤한 심신을 현관에 벗어두고 아들이 받아온 칭찬 스티커, 선생님께 혼난 일을 들으며 햇님 유치원의 판사가 되..
- 05. 푸바오 논란, 병든 대한민국 최근 동물원 판다가 총선만큼이나 유명하다. 나는 판다 한마리에서도 나타나는 대한민국의 병든 상황을 보고 있다. 오늘 할 얘기들은 주제가 주제인만큼 다른 글과 달리 매우 직관적이고 단순하다. 1. 감정 이입과 코로나 블루 감정의 이입은 동일시와 같다. 동일시의 과정에서 인간은 관찰하는 대상에 자신을 투영하는데, 대부분 자신의 상처받은 유년기를 투영한다. 푸바오는 왜 국민적 관심을 받게되었는가? 해서 찾아보니 최초의 국내출생 판다, 가장 먼저 눈을 뜬 판다라는 표면적 이유가 있지만 보다 중요한 것이 있었다. 코로나 시기에 태어나 국민의 코로나 블루를 달래주었다는 것이다. 첫번째, 왜 전염병과 격리는 사람을 우울하게 만들었을까. 사람들이 오프라인 만남과 모임을 통한 해소와 분출에 익숙해져 있기 때문이다. 그것..
728x90