sjy263942의 등록된 링크

 sjy263942로 등록된 네이버 블로그 포스트 수는 423건입니다.

Ethan Dufault - Signs [내부링크]

https://youtu.be/G5PyJVY1AaY

[스크랩] intellij mac 단축키 정리2 [내부링크]

https://gmlwjd9405.github.io/2019/05/21/intellij-shortkey.html

[스크랩] 자바의 정적 팩토리 메서드 [내부링크]

https://woowacourse.github.io/javable/post/2020-05-26-static-factory-method/

[스크랩] 자바 프로그래머가 실수하는 10가지 번역 [내부링크]

https://bestalign.github.io/top-10-mistakes-java-developers-make-1/

[스크랩] 자바 enum 자료형 특징 [내부링크]

https://honeyinfo7.tistory.com/135 enum 자료형의 특징 1. enum자료형으로는 새로운 객체를 생성하거나 계승을 통한 확장을 할 수 없기때문에 이미 선언된 enum상수 이외의 객체는 사용할 수 없다. 2. enum 자료형은 컴파일 시점 형 안전성을 제공한다. 만약 USER형 인자를 받는다면 3개의 인자중 하나만 받는다. 3. 싱글턴 패턴을 일반화 한 것으로 열거 상수가 하나뿐이다. 4. enum 자료형은 같은 이름의 상수가 공존할 수 있도록 한다. 네임스페이스가 이들을 분리시켜 주기 때문이다. 5. int enum패턴과 달리 상수의 값이 클라이언트 코드와 함께 컴파일되는 일이 생기지 않는다. 6. enum 자료형은 toString 메서드를 호출하면 인쇄 가능 문.......

Loving Caliber - Homesick [내부링크]

https://youtu.be/JrxQTRcXoGo

Isac Elliot - Waving At Cars [내부링크]

https://youtu.be/9_j5XFJy4NA We don't need a plan to live in this moment Sometimes you gotta take a chance while it's there I don't wanna spend my whole life hoping So tell me, baby, are we going somewhere? We don't need to hold back, not for a minute I'm painting a picture and I want you in it Anything you dream of, I'll let you live it I just need to know if we're going somewhere Or are we waving at cars? Just watching them pass Is that who we are? Just stuck at the start Then watching them go back Waiting for our right Wondering if we're gonna be alri.......

Jake scott - Off [내부링크]

https://youtu.be/bp6ZIPB_pH8 If I don't hit the high notes what's going on inside your head? 'Cause if we're just sitting in the silence what's not being said? I just try to keep you laughing To keep a smile on your face Always gaging your reaction So I know what to say And I know it shouldn't be a big deal If the real me gets a little too real But I'm afraid of what you'll feel So tell me Would you be here in the morning if I let the lights turn off? Would you be disappointed if you saw through my façade? And would you love me less if I'm not every.......

Maroon5 - Beautiful Mistakes (Lyrics) ft. Megan Thee Stallion [내부링크]

https://youtu.be/yJod2LFvK7Q It's beautiful, it's bittersweet You're like a broken home to me I take a shot of memories and black out like an empty street I fill my days with the way you walk and fill my nights with broken dreams I make up lies inside my head Like, "One day, you'll come back to me" Now I'm not holding on, not holding on I'm just depressed that you're gone Not holding on, not holding on Beautiful mistakes I make inside my head She's naked in my bed And now we lie awake, makin' beautiful mistakes I wouldn't take 'е.......

[스크랩] 자바 얕은복사 VS 깊은복사 [내부링크]

https://rok93.tistory.com/entry/%EC%96%95%EC%9D%80%EB%B3%B5%EC%82%AC-VS-%EA%B9%8A%EC%9D%80%EB%B3%B5%EC%82%AC

[스크랩] Nginx와 Keepalive [내부링크]

https://sarc.io/index.php/miscellaneous/998-keepalive

lullaboy - The Tinder Song (Official Audio) [내부링크]

https://youtu.be/F1WoK7VMHgc Take out all the secrets Take away the lies I'm all the hearing stories All about this other guys And if you say I'm perfect But you keep swiping right (I should run, I should hide) But girl it's everything you do And everything you do to me Standing in a room You're the only one I see Tell me that the truth is after all we're more than just pretend And I'm more than just a friend I heard a million stories Like it's not you, it's me But you're the only one I've wanted in my sweet seventeen And if you say I'm pe.......

[스크랩]스케일 아웃과 스케일 업 [내부링크]

https://library.gabia.com/contents/infrahosting/1222/

[스크랩] 동기 vs 비동기 (feat. blocking vs non-blocking) [내부링크]

https://velog.io/@wonhee010/%EB%8F%99%EA%B8%B0vs%EB%B9%84%EB%8F%99%EA%B8%B0-feat.-blocking-vs-non-blocking

Boys in Space - Picking Flowers [내부링크]

https://youtu.be/jqhHpRaRlv8 Lights out, it's cold outside You're not here Oh, when I think of your face, it's crystal clear Mm-mm-mm-mmm And I say I'm fine, but I'm lying at the time And I say I'm cool, but how could I be? And I say I'm over it, not over it at all Stuck in-between it all Picking flowers don't really mean much If you're not by my side when I wake up I leave the TV on, make me feel less alone You're asleep, and I'm awake at midnight Counting sheep until I'm out of my mind Looking at pictures from you and your camera ph.......

Austin taylor - Only want you [내부링크]

https://youtu.be/F5RLCWWo6wE I only want you I only want you I'm lovin' what I see baby Yeah, I can't deny The way I feel tonight You got me on one knee, baby Pledging my life To you, cuz you the highlight No one else gets me excited When you touch me, I'm ignited Even with your clothes on, you're so fire Shining bright when it's midnight Baby, let me change your life Let me show you how I'm feeling inside I only do this type of thing with you, ah yeah You ain't gotta worry, cuz it's true So true I only want you, yeah Your friends think I'm try.......

[스크랩] 네이버 카카오 합격 후기 [내부링크]

https://sihyungyou.github.io/being-a-developer/

[스크랩] 딥러닝 모델 훈련과 배치와의 관계 [내부링크]

https://www.kakaobrain.com/blog/113 [요약] 배치를 키우면, 전체 데이터셋의 특성을 더 잘 보게 됨. 즉, 전체 데이터를 잘 표현하는 sampling 키우면 1 epoch당 훈련 횟수도 줄어들어서 훈련 소요시간이 적게 듦. 그럼에도, 배치가 크게 되면 최적화/일반화 부분에서 문제가 있을 수 있다. local minimum에 빠져서 잘 못빠져 나오는 등(이걸 개선하기 위해서 lr을 배치사이즈 늘릴때 같이 키운다). 오히려 최적화/일반화 부분에서는 batch 사이즈가 작으면 outlier들의 가중치 업데이트의 편차가 심해져서 local minimum 잘 탈출할 수 있다. 앞선 줄과 같은 맥락 그러나 큰 배치와 미니배치와의 학습 곡선이 유사하게 그려진다면, 큰 배치의 가.......

[스크랩] Pytorch와 TensorFlow 동시 활용하기 [내부링크]

https://jeongukjae.github.io/posts/pingpong-torch-to-tf-tf-to-torch/

[스크랩] 프로세스 / 스레드 / 커널 [내부링크]

https://asfirstalways.tistory.com/52?category=656859

[스크랩] 함수 호출방식 [내부링크]

https://wayhome25.github.io/cs/2017/04/11/cs-13/

[스크랩] JVM란 무엇인가 [내부링크]

https://asfirstalways.tistory.com/158?category=660807

[스크랩] Java Reflection API [내부링크]

https://woowacourse.github.io/javable/post/2020-07-16-reflection-api/ [ 발췌 ] Spring Freamwork 등을 학습하면서 reflection에 관한 내용을 접하게 된다면 ‘프레임워크에서 구체적이지 않은 객체를 받아서 동적으로 해결해주는구나!’로 이해를 시작하면 된다. Spring Framework에서도 Reflection API를 사용하는데 대표적으로 Spring Container의 BeanFactory가 있다. Bean은 애플리케이션이 실행한 후 런타임에 객체가 호출될 때 동적으로 객체의 인스턴스를 생성하는데 이때 Spring Container의 BeanFactory에서 리플렉션을 사용한다. Spring Data JPA 에서 Entity에 기본 생성자가 필요한 이유도 동적으로 객체 생성 시 Reflection AP.......

[스크랩] 자바와 스프링 Singleton Pattern [내부링크]

https://webdevtechblog.com/%EC%8B%B1%EA%B8%80%ED%84%B4-%ED%8C%A8%ED%84%B4-singleton-pattern-db75ed29c36 - Lazy Holder 방식이 대표적 (volatile, synchronized 안써도 되므로) 주소를 상수로써 저장한다. 이후 getInstance() 메소드를 통해 사용할 때마다 이 저장소 주소를 받아 참조하여서 사용하면 되는 것

[스크랩] 자바 Servlet [내부링크]

https://kohen.tistory.com/29

[스크랩] serialVersionUID에 대한 정확한 설명 [내부링크]

https://blog.naver.com/kkson50/220564273220

[스크랩] 개발자들에게 도움이 될 만한 9가지 기본 아마존 웹서버 (Amazon Web Service, AWS) 서비스 [내부링크]

https://velog.io/@openhub/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%93%A4%EC%97%90%EA%B2%8C-%EB%8F%84%EC%9B%80%EC%9D%B4-%EB%90%A0-%EB%A7%8C%ED%95%9C-9%EA%B0%80%EC%A7%80-%EA%B8%B0%EB%B3%B8-%EC%95%84%EB%A7%88%EC%A1%B4-%EC%9B%B9%EC%84%9C%EB%B2%84-Amazon-Web-Service-AWS-%EC%84%9C%EB%B9%84%EC%8A%A4

[스크랩] 정보이론과 KDL/Cross-entropy [내부링크]

https://ratsgo.github.io/statistics/2017/09/22/information/

[스크랩] Python 데코레이터와 wrapper [내부링크]

https://dojang.io/mod/page/view.php?id=2427

[스크랩] Dense Passage Retrieval for Open-Domain Question Answering [내부링크]

https://dg4271.github.io/question%20answering/Dense-Passage-Retrieval-for-Open-Domain-Question-Answering/

[스크랩] Python logging Streamhandler, Filehandler [내부링크]

https://greeksharifa.github.io/%ED%8C%8C%EC%9D%B4%EC%8D%AC/2019/12/13/logging/ [발췌] - handler object는 log 메시지의 level에 따라 적절한 log 메시지를 지정된 위치에 전달(dispatch)하는 역할을 수행한다. - handler의 종류는 15개 정도가 있는데, 가장 기본적인 것은 StreamHandler와 FileHandler이다. 전자는 Stream(console)에 메시지를 전달하고, 후자는 File(예를 들어 info.log)에 메시지를 전달하는 역할을 한다.

Vscode Debug 시작 경로 변경 [내부링크]

문제 상황 Vscode에서 Run and Debug를 누르면 root path를 시작점으로 디버깅을 시작한다. 만약 /code/train.py 모듈에 상대 경로 data_path='.data'를 선언했다면 본래의 의도는 data_path에 train과 같은 위계에 있는 '/code/data.py'를 할당하는 것이다. 그러나 디버깅을 시작하면 '/data'는 없는 경로라는 error를 맞게 된다. 디버깅 시작 경로를 변경할 필요를 느꼈다. 해결 1-1. Command(ctrl) + P로 'launch.json' 파일을 찾는다. 1-2. 혹은 아래 톱니바퀴 모양을 클릭한다. 2. 해당 파일에 "cwd": "${fileDirname}" 를 추가한다. cwd는 시작시 태스크 러너의 현재 작.......

Devin Kennedy - Something Bout That Feeling [내부링크]

https://youtu.be/urML6gu_8uY When it feels like I’ve been fading to the background Don’t leave my room for like a week don't wanna go out But all these moments keep me reminding me of just how Just how you can’t have the high’s without the letdowns I overcomplicate I underestimate How easy it is to live like this Feel better if I take my time Just a second and I’ll be alright I know that there’s a love that's gonna find me There’s something bout that feeling There’s something bout that feeling There’s something bout that feeling There’s something bout that feeling Outside t.......

[스크랩] 천재와 싸워 이기는 방법 [내부링크]

“천재와 싸워 이기는 방법” – 만화가 이현세 살다 보면 꼭 한번은 재수가 좋든지 나쁘든지 천재를 만나게 된다. 대다수 우리들은 이 천재와 경쟁하다가 상처투성이가 되든지, 아니면 자신의 길을 포기하게 된다. 그리고 평생 주눅 들어 살든지, 아니면 자신의 취미나 재능과는 상관없는 직업을 가지고 평생 못 가본 길에 대해서 동경하며 산다. 이처럼 자신의 분야에서 추월할 수 없는 천재를 만난다는 것은 끔찍하고 잔인한 일이다. 어릴 때 동네에서 그림에 대한 신동이 되고, 학교에서 만화에 대한 재능을 인정받아 만화계에 입문해서 동료들을 만났을 때, 내 재능은 도토리 키 재기라는 것을 알았다. 그러나 그 중에 한두 명의 천재를 만.......

[스크랩] NLP 서브워드 구축(Subword Tokenizer, Mecab, huggingface VS SentencePiece) [내부링크]

https://keep-steady.tistory.com/37 https://velog.io/@nawnoes/Huggingface-tokenizers%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-Wordpiece-Tokenizer-%EB%A7%8C%EB%93%A4%EA%B8%B0

[스크랩] Self-Supervision [내부링크]

https://hoya012.github.io/blog/Self-Supervised-Learning-Overview/

1039번 교환 [내부링크]

https://www.acmicpc.net/problem/1039 필요한 로직 : BFS [논리] TLE는 겪어봤어도 메모리 초과는 많이 못겪어봤는데, 이 문제는 중복 관리를 어떻게 하느냐에 따라 메모리 초과가 갈렸다. 메모리 제한이 걸린 경우는 vis를 set으로 관리하며 문자형 숫자의 두 자리를 swap한 결과들을 넣을 때였다. 애초에 set에 최대 10자리의 char가 반복해 들어가는 문제가 있었고, 그 대신에 cache[현재 숫자][그래프 레벨]에 bool값을 넣어서 메모리 사용을 줄이기로 했다. 또한 스왑 과정이 꽤 까다롭다. 너비 우선 탐색에 '너비'에는 문자열로 표현된 숫자의 두 자리를 swap하는 모든 경우를 넣게 되는데, 이를 위해 문자열을 리스트로 변환하.......

Level3 모두 0으로 만들기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/76503 필요한 로직 : DFS(트리 순회) [논리] 모든 노드의 값을 더해서 0이 되지 않으면 '모두 0으로 만드는 경우'에 포함될 수 없으므로 -1을 리턴해준다. 이 경우를 제외하면 트리를 리프 노드부터 순회하며, 리프->루트까지 현재 노드의 값을 상위 노드로 누적시키면 된다. 0번 노드에서 출발해(트리의 모든 노드는 루트가 될 수 있음) dfs에서 재귀에서 반환될 때 현재 노드 dst를 받는 구조이기 때문에, 서브 트리 상위 노드의 value인 a[src]는 그 값을 안전하게 누적하며 다시 상위노드로 전달할 수 있다.

Supernova [내부링크]

https://youtu.be/Vi0YQV28lUA 세상아 See me Supernova in the dark night 천억 개의 별이 존재한다지만 나의 나의 빛은 달라 Yeah 세상아 See me Supernova in the dark night 천억 개의 별이 존재한다지만 Oh 나의 빛은 달라 단 한 번만 나를 봐봐 거릴 걸어 아무것도 안 보이게 말야 무거운 책가방을 매 내 정체는 뭘 까나 넌 돌을 던져 난 그냥 맞는 게 편해 시간은 많이 흘러 버렸고 넘 많은 게 변해 난 너무 촉박했지 또래들보다 느린 걸음에 간절하다는 말에 내 맘을 다 담기는 어렵네 I break the wall 아마도 넌 믿지 못할 얘기들 엄마 형이 다음 주에 얼굴 한번 보재요 친구들과 돈 내고 공연했죠 10명 앞이어도 너무 행복했던 친구 놈.......

[스크랩] 정형데이터 feature selection [내부링크]

https://stackabuse.com/applying-wrapper-methods-in-python-for-feature-selection/ https://subinium.github.io/feature-selection/

2151번 거울 설치 [내부링크]

https://www.acmicpc.net/problem/2151 필요한 로직 : BFS [배경] 요구사항이 많은 문제는, 손으로 세부 절차를 정리하고 함수화한 다음에 코드로 구현해야 한다. 엣지 케이스는 어쩔 수 없지만 주요한 로직이 꼬이면 시간이 두배로 걸리기 때문에 차분하게 접근해야 한다. [논리] 1. 정보 파악 - 좌표 상태는 크게 4가지다. ['.','!','*','#'] - '#'는 arr에서 반드시 두개 존재하며 그래프 탐색의 출발지, 도착지 역할을 한다. - '*'는 벽이다. 빛은 벽을 투과할 수 없다. - '.'는 빛이 투과할 수 있다. - '!'는 거울을 설치할지 말지를 결정해야 하는 곳이.......

1956번 운동 [내부링크]

https://www.acmicpc.net/problem/1956 필요한 로직 : 플루이드 와샬 [논리] 사이클 판단을 위해 가장 먼저 떠오르는 개념은 dfs/disjoint-set인데, 우리는 사이클 발생 시 최단 거리까지 판단해야 한다. 가중치가 있는 간선 정보에 관해서 다익스트라/벨만포드/플루이드와샬 중 어떤 걸 선택해야 할까? 모든 정점 간의 최단거리를 저장해두는 플루이드 와샬을 선택하는 것이 현명하다. 다익스트라의 경우 모든 출발 정점에 한해서 distance 테이블을 생성해야 하고 다시 특정 정점간의 조합을 선택하는데 자원을 소모하기 때문이다. 물론 플루이드 와샬을 쓸 때는 O(V^3)내로 연산이 가능한지를 먼저 판단해야 한다. 사이클이 발생했다는 것은 d.......

12865번 평범한 배낭 [내부링크]

https://www.acmicpc.net/problem/12865 필요한 로직 : DP(Knapsack) [논리] 전형적인 냅색 문제다. 백준 7579번 문제와 같은 유형으로, 묶어서 풀이할 예정이다. https://blog.naver.com/sjy263942/222316752840

7579번 앱 [내부링크]

https://www.acmicpc.net/problem/7579 필요한 로직 : DP (Knapsack) [배경] Knapsack 문제는 3가지 포인트를 잡으면 된다. 1. item 순회 인덱스는 DP 배열의 행 역할을 한다. 이 문제에서 인덱스는 i번째로 활성화되어 있는 앱을 가르키기 위함이며 mems[i]는 해당 앱이 차지하는 메모리, costs[i]는 다시 활성화하는데 드는 비용이다. 우리는 cost를 최소화해야 하며, memory의 경우 M 이상이 되면 어떤 용량이건 상관없다. 냅색 문제에서는 i번째 아이템을 넣는 것이 이득일지 넣지 않는 것이 이득일지를 판별하는게 주요 로직이므로, i-1번째 아이템을 참조하면서 배열을 갱신해나간다. 2. cost minimize cost는 DP 배열의 열 역할을 한다. c.......

16235번 나무 재테크 [내부링크]

https://www.acmicpc.net/problem/16235 필요한 로직 : 시뮬레이션 [배경] 문제 조건에 "봄에는 ... 하나의 칸에 여러 개의 나무가 있다면, 나이가 어린 나무부터 양분을 먹는다"는 조건에서 가장 먼저 우선순위큐를 떠올려 구현했지만 TLE가 났다. 힙 생성에 따라 필요없이 정렬 시간이 소요된 것이 원인이었다. 그리고 배열 참조 횟수를 줄이기 위해 spring과 summer, autumn과 winter을 grouping해주어 구현했다. [논리] 나이와 양분이라는 속성, 그리고 arr[r][c]를 deque 자료구조로 구현하는 부분에 주목한다. arr[r][c]에는 여러 나무들이 존재할 수 있고, 그 나무들의 존재는 나이값으로 대체할 수 있다. rich[r][c]에서 확인.......

[스크랩] Python 메모리 관리 기법 [내부링크]

https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189

10830번 행렬 제곱 [내부링크]

https://www.acmicpc.net/problem/10830 필요한 로직 : 분할 정복 [논리] A^15 = A*A*A*(...)*A 으로 15번의 matrix multification이 필요하다. 지수승에 해당하는 B의 상한이 1000억이 되기 때문에, 제한 시간내 O(N^3)의 곱셈 과정을 B번 반복할 수 없다. 이 문제를 해결하기 위해서는 분할 정복을 연상하며 지수승을 낮출 수 있다. 예를 들어 A^15은 A^(8+4+2+1)으로 표현될 수 있으며, 최종적으론 A^(11110(2)) 으로 지수를 이진수로 변환해 풀이해볼 수 있다. 이렇게 되면, A를 2번 곱한 tmp arr가 0/1/2/3번 지수승한 결과를 반환하면 되며, 이 값들을 단위 행렬에 차례로 곱해나가는 식으로 4번의 연산을 추가하면 된다. 즉 15번의 과.......

6087번 레이저 통신 [내부링크]

https://www.acmicpc.net/problem/6087 필요한 로직 : BFS + DP [논리] 최단거리가 아닌, 배열 이동 시 방향을 변경한 최소 횟수를 구하는 문제다. 따라서 출발점에서 target지점에 도착했다고 하더라도, 이 과정에서 최소한으로 방향이 바뀌었음을 확정할 수 없어서 출발점에 도착하는 모든 사례들을 비교해봐야 한다. 이때, 너비 우선 탐색시 중복관리를 했던 패턴을 바꿔줄 필요가 있다. 한번 방문한 (r,c) 지점을 다시 방문할 수 있게 허용할 때는 vis[r][c]보다 현재 path에서 더 작거나 같은 횟수로 방향을 바꿀 수 있을 때가 된다. 즉, 중복은 최소한의 turn 수로 바꿀 수 있는 원소에 한해서만 허용한다는 의미다. 이를 위해 vis는 bool값.......

[스크랩] SQL vs NoSQL [내부링크]

https://hankyeolk.github.io/2021/02/10/sqlvsnosql.html

[스크랩] MRC [내부링크]

https://tv.naver.com/v/4584299

4991번 로봇 청소기 [내부링크]

https://www.acmicpc.net/problem/4991 필요한 로직 : BFS + DFS(순열) [논리] 시작 좌표와 더러운 칸들의 좌표는 모두 그래프의 node 개념으로 바라보았다. 문제 풀이의 핵심은 크게 3가지다. 1. 노드 간 이동 거리는 최단 거리를 보장해야 한다. 너비 우선 탐색 함수를 선언하되, 시작 지점과 타겟 지점은 여러번 바뀔 수 있으므로 인자로 sr,sc,tr,tc를 넣어주어 함수화하였다. 2. 노드 간 이동이 최단거리를 보장한다고 해도, a->b->c 와 a->c->b 등 탐색할 경로의 순서에 따라서 총 거리가 달라질 수 있으므로 총 거리의 최단을 보장하지 못한다. 따라서 탐색 순서를 지정하는 순열을 만드는데 깊이 우선 탐색을 활용한다. 이때.......

[스크랩] 개발자로 살아남기 [내부링크]

https://brunch.co.kr/@jypthemiracle/14

[스크랩] 잘 정리된 이력서보다 중요한 것 [내부링크]

https://minieetea.com/2021/04/archives/6193?fbclid=IwAR0uQB1tZX0d_vofcpQBQfbi9PjYn5LulDXY-AKMyWitWtSmv8Q2I2o2Pbg

13397번 구간 나누기2 [내부링크]

https://www.acmicpc.net/problem/13397 필요한 로직 : 이분탐색 + 투포인터 [배경] 굉장히 좋은 문제였다. 파라메트릭 서치의 lower bound + 투포인터 리스트 탐색 개념이 잘 섞여있다. 오랜만에 한번에 pass를 한 기분 좋은 문제였다. [논리] 출력값(target) 자체를 targeting하여 이분탐색을 진행한다. 문제에서 요구한 "구간의 점수의 최대값의 최소값"을 풀어서 쓰면 다음과 같다. 1. 한 케이스 : (각 구간의 최대값-최소값) 중 최대값을 고르고 2. 모든 케이스 : 그 최대값들 중 최소값을 구하라 그리고 제약이 하나 있다. 한 케이스의 구간이 1~M이하로 생성되어야 한다는 점이다. 이제 종합해보자. 이분탐색은 하나의 케이스에.......

Level3 방문 길이 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/49994 필요한 로직 : 구현 [논리] 상하좌우로 향하는 화살표에는 시작점과 끝점이 있다. 처음 이 문제를 접하면, 끝점을 기준으로 path를 정리하면 되겠구나라고 생각이 든다. 하지만, LRLRL 과 같은 케이스에 대해서는 답이 1이 나와야 한다. 즉 좌우로 화살표를 움직이더라도 한 선분만을 점유하기 때문에, 시작점과 끝점이 바뀐 상태도 하나의 path로만 처리한다는 것이다. 따라서 중복된 path를 걸러주는 vis에는 (시작좌표 r/c, 끝좌표 r/c) 정렬해서 담아주며 방문한 선분들을 관리한다. 이런 문제에서 중요한 것은 언제나 "현재좌표/시작점/끝점/방향"이다.

gcd/lcm/소수찾기, 진법 변환 [내부링크]

1. 최대 공약수, 최소 공배수 - 유클리드 호제법 이용 2. 진법 변환 3. 소수 찾기 - 에라토스테네스의 체

Level4 게임 맵 최단거리 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/1844 필요한 로직 : BFS [논리] Level4에 속한다니.. 이해가 되지 않는다. 정말 기본적인 bfs 구현으로 풀린다. 출발점만 (0,0) 혹은 (n-1,m-1) 중 하나로 잡아서 다른 한쪽으로 갈 수 있는지 찾는 문제다. 최단 거리로 이동하므로 너비 우선 탐색하고 도착 시의 레벨을 출력하면 된다.

Level2 쿼드압축 후 개수 세기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/68936 필요한 로직 : 분할 정복 [배경] 문제 풀이에 여러 블로그들을 참고했다. 트리와 분할정복 풀이 과정은 쉽게 연상이 되는데, 배열을 다루는 것은 익숙하지가 않다. 멍충이다 나는 [논리] 1. divide 길이 n 정사각형을 길이 1 정사각형이 될때까지 4분할한다. 최소 단위의 부분해(recursion base case)를 만들고 해당 지점의 값이 0인지 1인지를 판별한다. 최종 출력할 값이 ans=[0카운트수, 1카운트수] 이므로 길이 1 정사각형이 되면 그 값이 0인지 1인지를 idx로 취급해 ans[idx]에 1을 카운트한다. 2. conquer & merge 정답 코드에서는 정사각형을 4분할 했을 때 가장 왼.......

Level3 배달 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12978 필요한 로직 : 다익스트라 [논리] 양방향 그래프를 표현하도록 인접 리스트를 생성한다. 이후 1번 노드를 출발점으로 다른 노드까지의 최단 거리를 구한 dist 테이블에서 K이하인 원소들만 카운트한다. 문제에서 한 노드에서 다른 노드로 가는 길이 여러개 있을 수 있다고 하는데, 어렵게 생각할 필요 없이 min-heap으로 똑같이 관리하면 된다.

16926번 배열 돌리기1 [내부링크]

https://www.acmicpc.net/problem/16926 필요한 로직 : 구현 [논리] 주어진 배열을 반시계 방향으로 R번 돌린 결과를 출력한다. 가장 겉의 테두리부터 안쪽 테두리 원소들을 각각 하나의 집합으로 보고, 그 원소들을 반시계방향으로 돌려주는 것이 1회 회전이다. 이때 회전의 시작 좌표를 설정해야 하는데, 제한 조건 중 min(N, M) mod 2 = 0 을 활용한다. i=min(N,M)//2는 가져가야 하는 시작점 갯수이자 0~(i-1,i-1)가 시작점 후보들이 된다. 시작 좌표 설정을 마쳤다면, 언제 방향을 틀어야 하는지를 고려한다. corners라는 배열에 회전해야 하는 지점들을 반시계 방향에 맞게 설정해주었다. 이때 주의할 것은 시작 좌표가 변경된다.......

16927번 배열 돌리기2 [내부링크]

https://www.acmicpc.net/problem/16927 필요한 로직 : 구현 [배경] 아래 문제는 정확히 탐색하는 것만으로도 풀리지만, 이 문제는 효율성까지 고려해야 한다. 확장 가능한 코드라고 하는 것은, 효율적인 탐색을 묻지 않아도 미리 고민하는 과정에서 나오는 것 같다. https://blog.naver.com/sjy263942/222298147452 [논리] 회전 횟수 R의 범위가 최악의 경우 10**9이다. 한칸씩 움직이는 풀이법으로 이 범위의 회전을 충족시킬 순 없다. 따라서 모듈러 연산을 통해, 제자리로 돌아오는 경우의 수를 압축해야 한다. 즉, 테두리 길이로 R을 나누면 그 몫은 회전 후 제자리로 돌아오는 횟수이며, 나머지는 제자리에서 떨어진 거리가 될 것이다. 우.......

16935번 배열 돌리기3 [내부링크]

https://www.acmicpc.net/problem/16935 필요한 로직 : 구현 [논리] 골치아픈 구현문제. 정말 하나하나 다 구현하면 된다. 이전에 배열 회전에 관한 코드를 팁으로 써두었는데, 이렇게 구현하면 오른쪽/왼쪽 90도 회전은 바로 짤 수가 있다. https://blog.naver.com/sjy263942/222280964737 다만, func5,6의 경우 배열을 4등분해서 rotate하므로 그에 대한 길이 4짜리 리스트를 만들고 하나의 원소가 배열 1등분을 의미하도록 만들었다. (아래 코드의 tmp) 이렇게 되면, 오른쪽 왼쪽 회전은 단순히 해당 배열 등분을 몇번째 위치시키느냐의 문제로 바뀐다. 따라서 tmp 리스트를 필요에 맞게 정렬하고 다시 N*M array형태로 돌려주면 된다. 이때 리.......

11000번 강의실 배정 [내부링크]

https://www.acmicpc.net/problem/11000 필요한 로직 : 그리디 [논리] 우선순위큐 두개를 활용했다. 하나(heap_for_allocation)는 시작 시간이 이른 순으로 강의를 할당하기 위해 사용하고, 다른 하나(heap_for_validation)는 종료 시간이 가장 빠른 강의를 파악하기 위해 사용했다. 즉 배치와 검증 과정에 힙 자료구조를 활용했다. 물론 배치의 경우 우선순위큐를 활용하지 않고 그냥 큐에 넣고 오름차순 정렬해도 된다. heap_for_validation의 top은 현재 가장 빨리 끝나는 강의다. 따라서 이 강의보다 일찍 시작하는 강의가 들어와야 한다면 (1) 강의실을 새롭게 할당해야 하고, 아니라면 (2) 강의실을 서로 replace한다. (1) 할당 : 강의실 하.......

[스크랩] 문제 해결의 원칙 [내부링크]

https://brunch.co.kr/@wirteforwrong/18

[스크랩] Java effectively final [내부링크]

https://madplay.github.io/post/effectively-final-in-java

[스크랩] 쏘카의 딥러닝 모델 serving [내부링크]

https://tech.socarcorp.kr/data/2020/03/10/ml-model-serving.html

11653번 소인수분해 [내부링크]

https://www.acmicpc.net/problem/11653 필요한 로직 : 소인수분해 [논리] N을 나누는 인수 i는 2부터 시작된다. i로 나누어 떨어진다면, 같은 인수로 다음 번에도 나누고 N을 몫으로 치환한다. 반면 현재 인수로 나누어 떨어지지 않는다면 인수를 1씩 늘려가며 나누어질 수 있는 경우를 찾는다.(인수가 최대 N을 벗어나지 않을 때까지)

2498번 탑 [내부링크]

https://www.acmicpc.net/problem/2493 필요한 로직 : stack [논리] 스택 문제는 역시 reflection point를 찾는게 중요하다. s1, s2 스택에는 인덱스(시점)들이 들어있고 스택의 top을 비교할 때는 Nlist[인덱스]로 수를 비교하게 된다. s1의 top으로 만든 숫자가 s2 top으로 만든 숫자보다 크다면 레이저를 받을 수 있는 탑이다. 따라서 s2를 비워가며 레이저를 받을 수 있는 탑을 모두 기록한다. 만약 s1 top으로 만든 숫자가 더 작다면 그 수는 pop하여 s2 스택에 저장한 뒤, 다음 시점에 레이저를 받을 탑이 있는지 확인하면 된다. 주의할 것은 오른쪽 탑에서 왼쪽 탑으로 레이저를 쏘고 있으므로, 다음 시점은 t -> t-1로 줄어드는 형태.......

2304번 창고 다각형 [내부링크]

https://www.acmicpc.net/problem/2304 필요한 로직 : 투포인터 [배경] 문제를 보고 leet code의 trapping water나 백준의 빗물 이라는 문제가 떠올랐다. 두 문제 다 스택으로 풀고는 했는데, 창고 다각형 문제는 투포인터로 풀어도 재밌을 것 같아 시도했다. ㅎㅎ [논리] 투포인터가 적용되는 구간은 두 구간이다. 왼쪽과 오른쪽. 두 구간은 모든 기둥 중 길이가 가장 긴 기둥의 인덱스를 기준으로 나누었다. 그 이유는 "단조성"을 활용하기 위해서다. 창고 다각형의 면적을 구하기 위해서는 과거값보다 높이가 더 커지는 순간들을 캐치해야 한다. 따라서, 일관된 논리를 가져가기 위해서 우측에서 좌측으로, 좌측에서 우측으로 현재.......

Level3 풍선 터뜨리기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/68646 필요한 로직 : 구현 [논리] a의 길이는 1 이상 1,000,000 이하이고, a의 모든 수는 서로 다르다. 최후로 남길 원소보다 작은 풍선을 터뜨릴 기회는 딱 한번만 주어지고, 그 외로는 모두 해당 원소보다 큰 풍선들만 터뜨릴 수 있다. a의 길이가 백만인만큼 최대한 O(N)~O(NlogN) 근접하게 풀 것이라 접근해야 한다. 그래서 res 배열을 하나 두고, 모두 1의 원소값을 담아두었다. 왼쪽부터 오른쪽 끝까지 a 리스트를 순회하고, 최소값을 갱신한다. 이때 a[i]가 최소값 minv1보다 작다면 res[i]를 1씩 뺀다. 자신보다 작은 수의 풍선을 터뜨렸으므로 주어진 한번의 기회를 썼다는 의미다.......

Max - Circles [내부링크]

https://www.youtube.com/watch?v=LBoJgua8vvA Wiping off your tears on your sleeve Telling me to take a step back Reaching out your hand with my keys in it Don't tell me it's over It's not over Baby We've fixed this before Drives you crazy I'm sorry We keep running in circles I hate that I hurt you We still have a heartbeat Don't give up on me Say a lot of things we don't mean We can start again, baby, don't leave Just another one of our cycles Here we are again in the rain 'Bout to throw your ring on the tracks Right under the very same train Wh.......

Level2 조이스틱 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42860 필요한 로직 : 그리디 [논리] 그리디로 문제를 접근하려면 "부분해의 모음으로 최적해"를 보장할 수 있는지 확인해야 한다. 조이스틱으로 현재 pos에서 좌우로 이동가능한 상황이고, A가 아닌 가장 가까운 원소를 찾는다면 해당 위치를 new pos로 삼고 다시 A가 아닌 가장 가까운 원소를 찾으면 된다. 이 과정이 최적해를 보장하는 이유는 문제에서 한 방향만을 고수하라는 조건이 없기 때문이다. 즉, 언제든지 좌/우 길로 되돌아갈 수 있어서 매순간마다 최적해를 고려하며 연산할 필요가 없다. res에는 A를 주어진 알파벳으로 만들기 위해 움직여야 하는 횟수를 담아두었.......

Level1 3진법 뒤집기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/68935 필요한 로직 : 진법 변환 [논리] 다른 문제에서 진법 변환 코드를 작성한 바 있다. 다만, 결과를 뒤집어서 출력해야 하므로 convert 재귀가 종료되면서 나올 때의 나머지수는 문자열 가장 끝자리에 추가해주면 되겠다. int(res,3)은 3진법으로 변환된 res string을 10진법의 수로 바꾸기 위한 트릭이다. https://blog.naver.com/sjy263942/222083542921

1495번 기타리스트 [내부링크]

https://www.acmicpc.net/problem/1495필요한 로직 : DP[논리]DP[i][j] : i번째 곡에 연주할 수 있는 볼륨 (연주할 수 있다면 1, 없다면 0)문제를 보면 가장 먼저 트리구조를 떠올리게 된다. S가 root node이고, diffs[i]만큼을 더하거나 빼면서 트리를 확장하는 구조다. N번째 곡에 가서 연주할 수 있는 볼륨이 있는지, 있다면 최대값이 무엇인지를 출력해야 하므로 DP배열의 N번째 리스트만 역으로 탐색하며 1로 할당된 열이 있는지만 찾으면 된다. 찾을 수 없다면 볼륨이 존재하지 않는 것으로 -1이 출력된다.

11058번 크리보드 [내부링크]

https://www.acmicpc.net/problem/11058필요한 로직 : DP[논리]A가 6번 반복되는 시점에 주목해본다. A를 6번 insert하는 방법도 있겠지만, A를 3번 insert 하고 (ctrl-A)+(ctrl-C)+(ctrl-V)하는 방식으로도 A를 6개 쌓을 수 있다. 앞으로 더 고려할 것은, ctrl-V는 ctrl-A와 ctrl-C가 등장하기만 했으면 계속 사용할 수 있다는 것이다. 물론 ctrl-A와 ctrl-C를 다시 활용 및 붙여넣어서 이전까지의 A값들을 다시 한번 불리는 것이 최적이 될 수도 있다. ctrl-V를 사용하는 것은 이전 A개수를 1배수 더 붙여넣는 것과 같다.따라서 DP[i]는 1. A값 insert2. (ctrl-A)+(ctrl-C)+(ctrl-V)3. (ctrl-A)+(ctrl-C)+(ctrl-V)+(ctrl-V)4. (ctrl-A)+(ct.......

2263번 트리의 순회 [내부링크]

https://www.acmicpc.net/problem/2263필요한 로직 : 이진 트리 + 분할 정복[배경]아래 리트 코드 문제와 거의 동일한 문제다. pre/post/inorder 중 두가지의 순회 순서를 알면 이진 트리를 복원할 수 있다. https://blog.naver.com/sjy263942/222175401402[논리]트리의 root를 잡는 용도로 post order 결과를 사용했고, 분할 정복 대상을 Inorder 결과로 잡았다. * ExampleInorder : 8 - 4 - 9 - 2 - 5 - 1 - 6 - 3 - 7postorder : 8 - 9 - 4 - 5 - 2 - 6- 7- 3- 1 preorder : 1 - 2- 4- 8- 9- 5- 3- 6- 7Inorder : 8 - 4 - 9 - 2 - 5 - 1 - 6 - 3 - 7postorder : 8 - 9 - 4 - 5 - 2 - 6- 7- 3- 1 노란색 원소를 트리의 root라고 하면 파.......

10025번 게으른 백곰 [내부링크]

https://www.acmicpc.net/problem/10025필요한 로직 : 투포인터[논리](minv-K)~maxv 구간 내 존재하는 모든 값들을 left pointer로 잡는다. 이후 right pointer를 움직이되, 윈도우 크기는 최대 2*K로 제한할 것이다. 윈도우 내에 있는 sum값이 최대가 되는 경우를 ans에 담았다. 윈도우 크기가 고정되어 있으므로 윈도우 밖으로 밀려나거나(sumv-=arr[s]) 윈도우 안으로 삽입되는 경우(sumv+=arr[e])만 잘 분기해주면 된다.

Level3 (kakao) 합승 택시 요금 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/724131. 다익스트라 풀이 2. 플루이드 와샬 풀이필요한 로직 : 다익스트라 or 플루이드 와샬[배경]시간 제한이 넉넉했는지 플루이드 와샬 풀이도 가능했다. 정점 간 정보를 모두 담고 간다는 면에서 플루이드 와샬 풀이도 편하지만, "경유지"의 개념을 도입해 다익스트라로 풀어도 유익하다.[논리]모든 가능한 경유지 t에 대해서 min(s->t + t->a + t->b)를 활용한다. 이 경우 그림에서 보듯 A와 B가 합승한 뒤 독립적인 path를 가거나, 합승하지 않거나, A나 B가 한 노드의 path 안에 속할 경우 모두를 함축할 수 있다. 다익스트라를 세번 돌려 dist table을 stable.......

Level4 (kakao)동굴탐험 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67260필요한 로직 : DFS[배경]문제 출제 의도에 맞게 다시 풀어봤다. 물론 저번 풀이에서처럼, 노드들의 방문처리 즉 중복관리가 핵심이다. * 이전 풀이https://blog.naver.com/sjy263942/222193710086[논리]양방향 그래프가 입력으로 주어진다고 해도 0번 노드가 그래프의 시작점이라는 점, 그리고 선행/후행이라는 위계가 주어진다는 면에서 방향 그래프로 만들면 편하다. 단, 방향이 src -> dst 구조가 아닌 dst -> src 구조로 directed graph를 설정한다. 0~N-1까지의 현재 노드를 기준으로 반드시 거쳐올 인접 및 선행 노드를 활용하기 위해서다. 예를 들어 노드 A를 방문하.......

9466번 텀 프로젝트 *리팩토링* [내부링크]

https://www.acmicpc.net/problem/9466필요한 로직 : DFS (cycle 판별)[논리]그래프의 cycle 존재 유무를 판단할 때는 DFS 스패닝 트리를 구성해 backward edge가 존재하는지를 찾으면 된다. 즉, child node에서 ancestor node로 backward되는 것을 찾는다는 의미다.(1) if vis[src] : return srcdfs가 돌고 있는 와중 방문한 노드를 재방문하게 된, back edge가 발생한 시점이다. 해당 노드(v)를 그대로 리턴한다. 우리의 최종 목적은 cycle path에 들어있는 노드들을 체크하는 것이므로, 다시 v를 만날 때까지 dfs를 return하는 과정에서 만난 정점들은 모두 cycle[src]=True로 처리한다. 사이클에 속하지 않는 원소의 수를 출력하는.......

16929번 Two Dots [내부링크]

https://www.acmicpc.net/problem/16929필요한 로직 : 구현[논리]cycle을 판별하는 것이 핵심인데, 직사각형의 특성상 사이클이 생기는 시점은 이동한 점이 다시 직사각형을 만든 시작점으로 오는 시점이다. 즉, sub-cycle 발생을 우려하지 않아도 된다. 최소 사분면을 가질 수 있도록 cnt가 4이상일 때, 끝점과 시작점이 같아질 때를 cycle 발생으로 구현했다. 아래 코드처럼, 사이클을 한번이라도 마주하면 재귀함수는 모두 True를 반환하며 끝나게 된다.

1890번 점프 [내부링크]

https://www.acmicpc.net/problem/1890필요한 로직 : DP[논리]주어진 arr에서 (0,0)->(N-1,N-1)까지 도착하는 데는 "오른쪽", "아래" 두 방향만 이용해야 한다. 답안으로는 arr상에 쓰여있는 값(d)을 기준으로 "점프"하는 케이스들을 모두 고려해, (N-1,N-1)까지 도착할 수 있는 경로가 몇개나 되는지를 출력한다. for i ~ for j 로 이중 루프를 들며, 경로가 있는 지점(0이 아닌 값이 할당된 지점)에서는 jump하여 다음 지점에 경로 수를 누적하는 방식으로 해결했다. [주의]마지막 arr[N-1][N-1]의 값이 0이기 때문에, for문을 즉시 탈출하지 않으면 DP[N-1][N-1]이 다시 DP[N-1][N-1]값으로 더해지게 되.......

15486번 퇴사2 [내부링크]

https://www.acmicpc.net/problem/15486필요한 로직 : DP[논리]optimal solution은 부분 문제의 합으로 결정될 수 있다. 즉, 현재(t) 시점에서 일을 하는 것이 이득일지 오늘을 쉬고 내일(t+1) 일을 하는 것이 이득일지는 t시점에서는 알 수 없다. 주어진 N이라는 기간을 모두 산정해보며 스케줄링을 해야 최대 이득을 고려할 수 있다.이 문제의 핵심 점화식은 다음과 같다. i+T[i]는 현재 일을 한다고 결정하면 다음 번에 일할 수 있는 최초 시점이다. 따라서, D[i]+P[i]는 현재 일을 해서 i+T[i]에 받을 확정된 이익이며, 이전 어떤 시점이든 D[i+T[i]]에 확정된 이득이 있다면 둘을 비교해주면 된다. 즉, max 이득값으로 배열 D를 갱신한.......

15989번 1,2,3 더하기 4 [내부링크]

https://www.acmicpc.net/problem/15989필요한 로직 : DP[논리]DP[i][j] : 동전 j를 가장 마지막에 추가할 때 수의 합이 i가 되는 경우의 수 (j=1 or 2 or 3)필요한 총합에 1을 더해야 할 경우에 사용할 수 있는 동전의 종류는 1뿐이다.필요한 총합에 2을 더해야 할 경우에 사용할 수 있는 동전의 종류는 1,2가 될 수 이다.필요한 총합에 3을 더해야 할 경우에 사용할 수 있는 동전의 종류는 1,2,3 모두가 될 수 있다.

1981번 배열에서 이동 [내부링크]

https://www.acmicpc.net/problem/1981필요한 로직 : BFS+이분탐색[논리]1. 이분 탐색 대상은 '최대값-최소값' 자체이다.arr 원소값의 범위가 1~200이므로 탐색된 경로로부터 '최대-최소'값의 max는 200(e)으로 초기화했다. target으로 잡은 mid값이 ispath로부터 존재할 수 있음을 확정받으면 mid값을 더 줄여보도록 하고, 아니면 키우며 값을 찾는다.2. ispath 함수는 bs함수가 잡아놓은 목표값 '최대-최소'값에서 최대, 최소값을 각각 활용한다. 너비 우선으로 arr를 (0,0)에서 출발해 (N-1,N-1)까지 도착할 때 탐색 경로의 모든 값이 최소(i), 최대(i+mid) 바운더리 안에 있는 경우가 있다면 True를 반환한.......

1194번 달이 차오른다, 가자 *리팩토링* [내부링크]

https://www.acmicpc.net/problem/1194필요한 로직 : BFS+비트마스킹[논리]https://blog.naver.com/sjy263942/222190704289예전 풀이는 논리가 간결하지 못했고, 중첩된 부분이 많아 아쉬워서 리팩토링 해봤다. bfs함수 내부의 주요 로직은 다음과 같다.1. 이동할 수 없는 공간 pruning (index out of range / '#'일 경우)2. a~f를 만나 키를 소지하게 되면, 현재 key를 새로운 상태로 갱신 3. A~F를 만나게 되면, 그에 대응하는 a~f 키를 가지고 있는지 확인. 소지하지 않았을 경우 pruning4. new key state를 바탕으로 방문하지 않았다면 덱에 넣어 관리위와 같이 덱에 (행/열 인덱스,그래프 레벨, 키 상태)를 관리하다가, arr 상.......

Colab ssh 접속(terminal & vscode remote ssh) [내부링크]

들어가기 전 가상 컴퓨터를 임대받을 수 있는 AWS EC2 서비스와 비슷하게 google colab도 가상 컴퓨팅 환경을 제공한다. EC2에서는 모든 개발 환경을 직접 구축해야 했는데 colab에서는 딥러닝에 필요한 패키지들이 이미 설치되어 있고, drive와 연동이 가능하며 jupyter notebook 환경이 기본으로 제공된다. 또한 GPU를 사용할 수 있어서 병렬처리가 필수인 딥러닝 분야에서는 colab을 빼놓고 이야기 할 수 없다. 다만 UI 자체가 노트북 형식으로 제공되기 때문에 vscode와 같은 IDE가 익숙한 사람들은 오히려 불편할 수도 있다. 따라서 이번 포스팅을 통해 terminal, vscode remote ssh를 이용해 colab 환경으로 원격 접속하는 법을 알아본다.......

9370번 미확인 도착지 [내부링크]

https://www.acmicpc.net/problem/9370필요한 로직 : 다익스트라[배경]33%에서 계속 틀렸습니다가 떴었다. 원인은 math.inf를 사용해 INF를 float형으로 설정한 것 때문이었다. if문 중에 ==으로 두 값을 비교하는 코드가 있는데, 그때 부동소수점 오차 문제가 발생했던 것 같다. sys.maxsize로 바꿨더니 통과됐다. float은 주의해서 사용할 것![논리]문제에서 출발점이 s이고, 목적지 target까지 향하는 최단 거리에 g-h 간선이 포함됨이 전제되었다. 따라서 target까지 가는 시나리오는 (1)s->g->h->target (2) s->h->g->target 두가지다. 두 시나리오를 종합하면 s->(g or h)->target 이 된다. 이때.......

Playlist4,5 [내부링크]

https://youtu.be/kIgJEuxdfscLUCY 밴드 <난로> 좋아하는데, 커버 정말 잘하셨다..!https://youtu.be/NmW5g5diTMQ신예찬님 바이올린 소리가 들어갔으면 더 좋았을 것 같다! 지금 노래도 너무 좋지만ㅎㅎ

9466번 텀 프로젝트 [내부링크]

https://www.acmicpc.net/problem/9466필요한 로직 : DFS[논리]https://blog.naver.com/sjy263942/222237897312이 문제랑 거의 똑같은 문제다. 다만, 사이클 path에 들어있지 않은 원소만 카운트해주면 된다. 또한 재귀 깊이가1000단위를 넘어가기 때문에 recursionlimit을 높이고 Python3로 제출해야 런타임에러를 막을 수 있다.

AI - 모델링보다 엔지니어링 [내부링크]

(구글 논문) “모두 모델링을 하고 싶어하고 데이터 작업은 피해요” – 데이터에 소홀한 AI 업계 – techNeedle 테크니들

베이즈 정리 & Pytorch Intro [내부링크]

https://github.com/ebbunnim/Naver-AI-BoostCamp/blob/main/notes/Day11.md#%EB%B2%A0%EC%9D%B4%EC%A6%88-%EC%A0%95%EB%A6%AC

신경망 video [내부링크]

https://www.youtube.com/watch?v=aircAruvnKk&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=1

backpropagation video [내부링크]

https://www.youtube.com/watch?v=Ilg3gGewQ5U&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=3

15653번 구슬 탈출4 [내부링크]

https://www.acmicpc.net/problem/15653필요한 로직 : 시뮬레이션 [배경]BFS를 이용한 시뮬레이션 문제다. 이거 정답률이 40퍼센트대라니... 분발해야겠다. 구슬이 동시에 구멍으로 떨어져야 하는 조건을 분기하는 거에서 시간을 썼다. [논리]1. 구슬은 "동시"에 움직인다.빨간 구슬과 파란 구슬은 "동시"에 굴러가야 한다. 만약 빨간 구슬이 움직인 visited 경로가 파란 구슬을 움직이게하는데 제한이 된다면 동시조건은 성립하지 않는다. vis배열을 굳이 4차원으로 관리하는 이유가 된다. 그리고 덱에 현재 상태, 즉 (빨간 구슬의 row, 빨간 구슬의 col, 파란 구슬의 row, 파란 구슬의 col, level)을 담는 이유도 동시.......

1655번 가운데를 말해요 [내부링크]

https://www.acmicpc.net/problem/1655필요한 로직 : 힙 자료구조 활용[배경]중앙값은 주어진 수를 정렬했을 때 가운데에 위치한 수이다. 따라서 핵심은 "정렬"과 "전체 길이의 가운데"를 찾는과정이 될 것이다.[논리]1. "가운데"의 의미 x라는 수가 가운데 위치하려면, x 왼쪽에 놓인 원소들의 수와 x 오른쪽에 놓인 원소들의 수가 균형을 이뤄야 한다. 전체 리스트가 홀수 개일때는 양측이 똑같이 나눠지지만, 짝수 개라면 지문에 따라 왼쪽을 기준으로 배치해야 한다. 그런데 문제가 하나 있다. 위치상 가운데를 알 수 있지만 현재는 모든 원소가 정렬된 상태가 아니다. 심지어 timsort로 입력값이 새로.......

Playlist3 [내부링크]

https://youtu.be/EnflDDyqE04

1525번 퍼즐 [내부링크]

https://www.acmicpc.net/problem/1525필요한 로직 : BFS[배경]색다른 bfs 문제였다. 우선 메모리 제한이 굉장히 작다. 그리고 탐색 과정마다 arr 상태가 바뀌게 되는데, 이때마다 arr나 vis배열을 계속 deepcopy해 넘기는 방식은 비효율적이라고 판단했다. 접근하는 방식을 고민하다가 다른 블로그를 참조했는데, (1) arr index를 string index로 변환하고 (2) 방문관리나 '123456780'이라는 정리된 상태를 check하는 것에 딕셔너리를 사용하라는 힌트를 얻을 수 있었다. [논리]1. arr idx <-> str idx문제는 arr 크기가 3x3으로 제한되어 있다. 따라서 (r,c)를 string idx로 바꾸는 것은 (3*r+c)를 활용하면 된다. 역으로.......

2668번 숫자 고르기 [내부링크]

https://www.acmicpc.net/problem/2668필요한 로직 : DFS[논리]dfs로 그래프의 cycle을 판별하는 문제다. 그래프의 시작 정점은 1~N 모두가 될 수 있고, x번 정점에 이어진 정점을 Nlist[x]로 취급해서 풀면 된다. 예를 들어 cycle이 생겼다는 것은 위 표에서 1->3->1 로, 1에서 출발해 1로 다시 돌아오는 경우와 같다. 따라서, stack에 path를 담아두었다가 방문한 곳이며(vis[x]==True) stack에 들어있을 경우 1,3 모두를 cycle 내부에 속하는 원소들로 check했다. [비슷한 유형]https://blog.naver.com/sjy263942/222168238874

12100번 2048(Easy) [내부링크]

https://www.acmicpc.net/problem/12100필요한 로직 : 시뮬레이션[배경]중복된 논리, 중복된 코드들이 들어가 있어서 아쉬운 풀이다. 다음에 solve() 함수 하나에 up,down,left,right 모두를 축약할 수 있도록 리팩토링할 것이다.[논리]up,down,left,right 함수 중 up,down함수를 대표로 하여 풀이한다. left,right는 arr순회 순서만 달라지므로 인덱스 관리에만 신경쓰면 된다. up함수는 "아래 행의 원소들"을 탐색하며 0이 아닌 원소를 끌어당겨야 한다. 현재 위치보다 아래 행을 계속 탐색하면서 끌어당기는 의미이므로 실제 순회는 행 우선순회 + range(0,N) 순회가 될 것이다. 반대로 down 함수의 경우 "윗행 원소들을.......

Playlist2 [내부링크]

https://youtu.be/zruRpNg29Xk

10942번 팰린드롬? [내부링크]

https://www.acmicpc.net/problem/10942필요한 로직 : DP[배경]0.5초가 시간 제한인데 쿼리로 물어볼 문자열의 크기가 최악의 경우 2,000이며 1,000,000회 반복된다. 따라서 특정 구간의 문자열이 팰린드롬인지를 반복해 확인할 수 없다. [s:e] 부분 문자열의 팰린드롬을 물으면 O(1)으로 담긴 값을 바로 전달해야 한다. 따라서 DP활용 + 팰림드롬 확인이 문제 풀이의 핵심이 된다.[논리]DP[i][j] : [j,(j+i)] 인덱스로 구성된 부분 문자열 팰린드롬 여부 (1-True, 0-False)i는 부분 문자열 구간 크기를 j는 문자열의 시작 인덱스를 의미한다. i가 0이면 한 문자를 의미하므로 반드시 팰린드롬이며, i가 1이면 구간 크기가 1이라는 의미이므.......

2589번 보물섬 [내부링크]

https://www.acmicpc.net/problem/2589필요한 로직 : BFS[논리]BFS로 최단 거리 이동이 보장되지만, 탐색 시작점이 어디냐에 따라서 시작점~끝점 사이의 max_depth가 달라지게 된다. 따라서 처음에 인풋을 받을 때 육지인 곳을 모두 start list에 담아두고 각 지점마다 bfs를 호출, global max_depth를 찾으면 된다.

1766번 문제집 [내부링크]

https://www.acmicpc.net/problem/1766필요한 로직 : 위상정렬 + 최소힙[논리]위상정렬 문제에 스페셜 저지 태그가 안붙어있다. 보통은 진입차수가 0인 애들부터 순서없이 큐에 넣어서 답이 다양하게 나올 수 있다. 그러나 이 문제는 진입차수가 0인 원소 간의 우선순위가 적용된다. 따라서 힙에 넣을 때 원소 번호가 더 작은 값을 우선 추출하는 방식으로 응용하면 된다.

다익스트라와 최소 스패닝 트리 [내부링크]

다익스트라는 스패닝 트리를 구성할 수는 있다. 신장 트리는 하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프이기 때문이다. 그런데, "최소한의 비용으로 스패닝 트리"를 구성하는 것을 보장하지 못한다.다익스트라와 최소 스패닝 트리는 목적 자체가 다르다. MST의 경우 모든 노드를 최소 비용으로 연결하는데 초점이 있다. (양의 간선만 존재 가정, 크루스칼 알고리즘 기준으로 설명) 그래서 간선 정보에 중점을 두고, 사이클을 이루지 않는 한 작은 비용의 간선부터 하나씩 경로를 이으며 신장 트리를 구성한다. 어떤 노드부터 간선을 뻗어야 하는지도 중요한 문제도 아니다. 그러나 다익스.......

파이썬 문자열 정규화 (Light) [내부링크]

새로 나온 다시시작해 폰트 너무 귀엽다 ㅎㅎ 개인적으로 자주 필요할 것 같은 내용을 정리했다. 더 효율적으로 문자열을 탐색하는 방법도 있을 것이므로, 깊이 있는 내용은 글 하단의 참고 사이트들을 방문하면 된다.파이썬에서 정규표현식을 사용하기 위해서는 Regex를 위한 모듈인 re 모듈을 사용한다. 자주 쓰는 함수는 compile과 sub함수다.re.compile & re.sub1. re.compilere 모듈의 compile 함수는 정규식 패턴을 입력으로 받아들여 정규식 객체 (re.RegexObject)를 리턴하게 된다. 이 클래스는 여러 메서드들을 가지고 있는데, search의 경우 특정 문자열을 검색하여 처음 매칭되는 문자열만 리턴한다. search는 검색 대상을 찾.......

2042번 구간 합 구하기 [내부링크]

https://www.acmicpc.net/problem/2042필요한 로직 : 세그먼트 트리[배경]세그먼트 트리는 구간(segment)들을 연속적으로 보존하고 있는 트리다. 리프 노드들은 모두 크기 1인 구간을 가지고 있고, 부모 노드는 자식들의 구간을 합하여 가지고 있는 구조다. 보통 포화 이진 트리로 사용하며, 노드들이 포화 이진 트리를 구성하지 못한다고 해도 dummy값들로 채워서 사용하게 된다. 편향 트리와 달리 "균형"잡힌 포화 이진 트리를 사용하면 트리의 높이로 보듯 탐색 시간 복잡도가 O(logN)이 되고, 왼쪽 자식 노드는 2*i, 오른쪽 자식 노드는 (2*i+1)로 자식 노드에 쉽게 접근할 수 있다. (보통 최상위 루트 노드의 번호를 1로 잡는다.......

Playlist1 [내부링크]

https://youtu.be/V5nhp8S1JZQ

gitmessage template 사용하기 [내부링크]

1. home 디렉토리에서 gitmessage.txt를 생성한다. touch로 파일을 생성해도 된다.2. 사용하는 에디터로 txt 파일을 열고 custom gitmessage template을 만든다. commit 할때의 규칙을 명시하는 일종의 rule이므로 자세히 작성한다. 스타일 가이드를 참조하도록 하고, 한글로 작성해도 된다. <Example>3. 작성한 gitmessage를 템플릿으로 지정하겠다고 선언한다.4. git commit 시 다음과 같이 description된다. i 끼워넣기로 commit 메시지를 template을 참조해 작성한다.

16681번 등산 [내부링크]

https://www.acmicpc.net/problem/16681필요한 로직 : 다익스트라[배경]최악의 경우 다익스트라를 대략 100000-2번 돌려야 하는 문제를 2번 돌려서 해결해야 한다. [논리]"집에서 출발해 임의 지점 target까지 최단 거리로 이동하고, target에서 학교까지 다시 이동해라"는 과제에 두가지 조건이 걸려있다.1. home -> target : 정점들을 지날 때 다음 정점은 현재 정점 height보다 높아야 한다.2. target -> campus : 정점들을 지날 때 다음 정점은 현재 정점 height보다 낮아야 한다.1번 그림처럼 최단거리 dist 테이블을 home을 시작 정점으로 한번 생성하고, target을 시작 정점으로 생성한다고 해보자. 최악의 경우.......

11003번 최솟값 [내부링크]

https://www.acmicpc.net/problem/11003필요한 로직 : 슬라이딩 윈도우[논리]윈도우의 크기를 L로 고정해 슬라이딩 하며 풀되, 윈도우 자체를 min-heap 자료구조 비슷하게 구현해서 해결했다. 윈도우 크기 L이 최악의 경우 5,000,000까지 잡히면, 윈도우 내부에서 최소값을 매번 선형 탐색하며 판별하는게 불가능해진다. 그러나 만약 최소힙 자료구조처럼 윈도우 가장 앞 원소가 항상 "최소값"이라고 보장이 된다면? 선형 탐색의 문제를 해결할 수 있을 것이다.이를 위해 push함수를 구현해두었다. 만약, 어떤 원소 nx가 window 안에 들어가고자 할 때 nx보다 더 큰 값들이 있다면 모두 밀어낸다. 왜냐하면, 새로 들어온 nx가 현재.......

경사하강법 정리 [내부링크]

https://github.com/ebbunnim/Naver-AI-BoostCamp/blob/main/notes/Day7.md

1149번 RGB거리 [내부링크]

https://www.acmicpc.net/problem/1149필요한 로직 : DP[배경]리팩토링 필요함. 예를 들어 0,1,2번 집이 있고 x번째 집과 x-1,x+1번째 집의 색깔이 같아서는 안된다고 하자(단, x>=1). 만약 현재 집의 색을 R로 하면, 다음 집의 색이 G가 돼야 최소 비용이 될지 B가 돼야 최소 비용이 될지 모른다. 세 집이 있다면 세 집 모두 "끝까지" 색을 배치해봐 알 수 있기 때문이다. 그러나 전체의 해답은 당장 몰라도, 부분 해답들을 역으로 끼워맞춰보면 답을 알 수 있을 것이다. DP다.[논리]세 집이 있다고 가정하면, 전체 구성은 R,G,B를 각각 루트로 하여 트리를 이룰 수 있을 것이다. R이 루트인 케이스를 대표로 본다. dfs 방.......

[PyTorch] Connecting to Visdom server Error 해결 [내부링크]

실습 환경deeplearningzerotoall/pytorch 도커 이미지를 pull받아 컨테이너 상에서 파이토치를 사용하고 있다.Error[Errno 99] Cannot assign requested addressMNIST-CNN의 loss graph를 그리기 위해 아래 #setup 부분을 참고해 visdom을 pip으로 install하고 서버를 켰는데도 에러가 났다. 8097포트에 visdom server가 켜져있는데 왜지? 당황했다.https://github.com/fossasia/visdom#setupSolve전역 터미널이 아닌 Docker container 내부 bash shell에서 켜주면 된다. 정말 당연한 일들을 깜빡했을 때 에러를 만난다. 정신 차리잣* 참고https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/issues/405

2096번 내려가기 [내부링크]

https://www.acmicpc.net/problem/2096필요한 로직 : DP ?[배경]처음 풀이에 메모리 초과를 받아서 지문을 다시 봤더니 메모리 제약이 4mb밖에 되지 않는다. int로 채운 10만*3 배열을 선언하고 메모이제이션으로 풀이하는 기존의 DP방식으로는 풀 수 없다. 자주 쓰지는 않았지만, 바텀업으로 노선을 바꿨다. 그리고 사실 이 문제를 굳이 DP로 분류할 필요는 없다고 생각한다. 입력값들을 한 줄씩 처리하면서 1*3으로 고정된 배열의 원소들을 매번 갱신하면 되기 때문이다. [논리]한 행에 열은 3개로 고정되어 있다. "내려간다"는 의미를 행을 순차적으로 1씩 늘려준다는 의미로 보면, 내려갈 때마다 최대점수 혹은 최소 점수를 갱.......

2533번 사회망 서비스(SNS) [내부링크]

https://www.acmicpc.net/problem/2533필요한 로직 : DP [배경]입력이 최대 백만번 들어올 수 있어서 stdin으로 입력 시간을 줄이지 않으면 시간 초과가 난다. 뭐가 문젠지 모르고 풀이를 몇 번이나 바꿨는지 모르겠다. 그렇지만 그 덕에 다른 분들의 좋은 풀이들을 보고 배울 수 있었다. 추가로 최대 재귀 깊이 설정+Python3 로 제출해야 메모리초과/recursion 에러를 피해갈 수 있다. [논리]얼리어답터 노드를 1로, 얼리어답터가 아닌 노드를 0으로 구분한다. 설명이 편하게 노드가 켜져있다, 꺼져있다로 표현하겠다. 이 문제를 처음 접하면 부모가 켜져 있으면 자식은 다 끄면 되는거 아냐?라고 접근할 수 있는데, 안된다. 아래 그림에서.......

파이썬은 인터프리터 언어인가? [내부링크]

컴파일러 언어와 인터프리터 언어파이썬은 인터프리터 언어다. 정말 많이 듣는 개념이다. 그런데, 여러 글들을 읽으면서 파이썬이 컴파일러 언어와 항상 대비되어야 하는 인터프리터 언어인가? 라는 의문이 들었다. 오히려 어떤 블로그 분이 "인터프리터와 컴파일러 언어의 구분은 언어의 특성이 아니라 구현의 문제다"라고 이야기 하신 점에 동의하고 있다. 우선 컴파일러 언어와 인터프리터 언어에 대한 차이점을 좀 살펴보자.컴파일러 언어컴파일러 언어의 경우 작성된 코드를 기계어로 먼저 번역해놓기 때문에, 실행 속도와 보안성 부문에서 우수하다. 물론 코드 수정 시 모든 부분을 재컴파일 하기 때문에 개발 기간이 오래.......

1976번 여행 가자 [내부링크]

https://www.acmicpc.net/problem/1976필요한 로직 : Union-find[논리] 예를 들어, "A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할 수 있다".이 문제에서 여행 순서는 중요하지 않다. 한 곳에서 출발해 필요한 경로들을 끊김없이 찾아갈 수 있으면 된다. 따라서 여행 경로들이 모두 같은 집합에 속할 수 있느냐를 판단하는 서로소 집합을 찾는 문제로 생각할 수 있다. 입력 값에서는 1번 노드, 2번 노드 등등 노드 번호를 숫자로 주었기 때문에, 길이 있다면 노드 번호가 작은 쪽으로 parent를 union한다. 지나야 하는 여행 경로 course에 존재.......

2211번 네트워크 복구 [내부링크]

https://www.acmicpc.net/problem/2211필요한 로직 : 다익스트라[배경]- 문제 Hint -"(중략) 심지어는 직접 연결되어 있는 회선이 오히려 더 느려서, 다른 컴퓨터를 통해서 통신을 하는 것이 더 유리할 수도 있다. (중략) 다른 컴퓨터들과 통신하는데 걸리는 최소 시간이, 원래의 네트워크에서 통신하는데 걸리는 최소 시간보다 커져서는 안 된다."[논리]결정적인 힌트는 "직접 연결되어 있는 회선이 우회한 경우보다 더 느리게 연결될 수 있다"는 점이었다. 다익스트라에선 현재 노드 -> 인접 노드 X까지 가는 최단 시간을 갱신하는 것이 주된 관심사지, 몇개의 노드를 거쳐왔는지는 중요하지 않다.슈퍼 컴퓨터와.......

1647번 도시 분할 계획 [내부링크]

https://www.acmicpc.net/problem/1647필요한 로직 : 크루스칼[논리]최소 비용으로 주어진 도시들을 두 마을로 나누고, 필요 없는 길을 모두 없애야 한다. 최소 신장 트리를 구성하고, 가장 큰 비용의 간선을 잘라주면 두 제약 조건을 모두 만족시킬 수 있다. MST에서 N개의 정점을 잇는 간선은 N-1개이기 때문에, N-2개의 간선 정보까지만 mincost에 더해주면 된다.

1102번 발전소 [내부링크]

https://www.acmicpc.net/problem/1102필요한 로직 : 비트마스킹+DP[배경]문제 제약부터 살펴보면 (1) 최소 P개의 발전소가 정상 가동되어야 하며 (2) 정상인 발전소만이 고장난 발전소를 고칠 수 있다고 한다. 재해석해 보자면 다음과 같다.(1) : 최소 비용으로 발전소를 수리해야 하므로, 정상 발전소가 P개가 되면 더 이상 고칠 필요가 없다. (2) : 단방향 그래프에서 costs[i][j] 가 i가 j 발전소를 고치는 수리 비용일 때, i는 반드시 정상 발전소여야 한다.N개의 전체 발전소 중 P개의 발전소를 뽑아서, 뽑힌 발전소들을 고치는 경우가 어떻게 나올까? 그려봤다.N이 3, P가 3, 그리고 0번 발전소만 정상인 상황을 가정한다.1-1. 0번 발.......

1918번 후위 표기식 [내부링크]

https://www.acmicpc.net/problem/1918필요한 로직 : 스택[배경]스택 문제에서 핵심은 변곡점(Inflection point)를 찾는 것이다. 스택에 데이터를 계속 push하다가, pop해야할 시점을 파악하는 용도로 자주 쓰인다. 그렇다면 이 문제에서 변곡점을 "앞으로 들어올 원소가 현재 스택의 top과 우선순위가 같거나 낮은 경우"로 정의하겠다. 입력값 중 알파벳은 순차적으로 이어붙일 것(=>ans)이며 스택에는 부호들을 관리한다. 변곡 지점이 있다면 필요한 부호들을 pop하며 ans에 함께 이어붙이는 식으로 운영한다.[논리]부호 +,-는 *,/ 보다 우선순위가 작다. 그러나 수식에서 임의로 우선순위를 주는 괄호'()' .......

1005번 ACM Craft [내부링크]

https://www.acmicpc.net/problem/1005필요한 로직 : 위상정렬 + DP[논리]문제에서 건설 규칙이 주어진다. 아래 그림과 같이 3번 건물을 짓기 위해서 2번과 11번 건물을 먼저 지어야 한다. 2번 건물까지 건설을 완료한 시간은 110이고 11번 건물까지 건설을 완료한 시간은 1010이다. 따라서, 3번 건물을 짓기 시작할 수 있는 시간은 2번 건물이 완공되고 11번 건물까지 지어진 1010이 되며 3번 건물을 건설하는데 필요한 시간을 더하면 1011에 완료된다. 따라서 1->2->3 과 10->11->3 과 같이 정점 3의 진입차수를 1씩 줄이는 순간들을 비교해, 소요 시간이 가장 긴 결과값을 저장할 필요가 있다. x 건물이 건설 완료된 시각을 관.......

9019번 DSLR [내부링크]

https://www.acmicpc.net/problem/9019필요한 로직 : BFS (+tracing)[배경]입력값을 길이 4인 스트링으로 고정하고, 하나씩 쪼개어 연산에 사용하였는데 시간 초과를 받았다. 알고 보니 L/R 연산에서 스트링 변환을 사용하면 시간초과가 나도록 설계가 되어있다고 한다. 그래서, L,R 연산의 경우 몫, 나머지 연산으로 자리수를 구하고 수를 변형해 사용하였다. [논리]입력값 변환 이슈가 아니면, BFS로 잘 풀리는데 좀 까다로웠다. 10000미만의 수에 대해서 완전탐색을 해야 하고, 탐색을 위한 연산이 D/S/L/R인 셈이다. 중복 관리는 10000크기의 배열에서 관리하고, start값이 end값으로 닿는 순간 BFS로 최단 거리를 보장했으므로 바로 명령.......

15591번 MooTube(Silver) [내부링크]

https://www.acmicpc.net/problem/15591필요한 로직 : BFS[논리]동영상 v를 보고 있을 때 USADO가 k이상인 연관 동영상이 추천된다. v를 시작 정점으로 보고 바로 인접한 v1, v2 정점이 있다고 하면, 거리(==비용)가 k이상일 때 계속 인접 노드 v1',v1''... 등등을 탐색하다가 k미만이면 탐색을 중단하고 v2 정점에서 같은 로직이 반복된다. 따라서 그래프 시작점 v와 비용 하한 k가 주어질 때, 너비 우선으로 그래프를 탐색하며 정점을 카운팅하면 된다.

1484번 다이어트 [내부링크]

https://www.acmicpc.net/problem/1484필요한 로직 : 투 포인터 [배경]문제가 정교했으면 하는 아쉬움이 있다. '성원이가 기억하는 몸무게'가 1이상이라는 조건이 없다. 본인이 0kg라고 기억할 수도 있을 것 같아서(아닌가..?ㅎㅎ) 0으로 시작점을 잡았다가 틀렸습니다가 계속 떴었다.[논리]위 식을 만족하도록 두 포인터 e와 s를 조절할 것이다. res를 e**2-s**2라고 할 때 res가 G보다 크거나 같다면 s포인터를 움직여서 값을 줄이고, G보다 작다면 e 포인터를 움직여 값을 키운다. res==G일 때는 따로 분기해 현재 몸무게인 e를 바로 출력하면 된다. G가 1~99999인 자연수이기 때문에 e와 s의 차이가 1이 나더라도 e*.......

2001번 보석 줍기 [내부링크]

https://www.acmicpc.net/problem/2001필요한 로직 : BFS + 비트마스킹[배경]아래 문제와 유사하게 vis배열을 관리했다. 다만 1194번에서는 키가 놓인 위치에서 무조건 키를 소지하게 되는데 이 문제의 경우 "보석을 주울 수도, 줍지 않을 수도 있다"는 점이 다르다. 따라서 14개의 보석이 취득된 상태인지 아닌지를 비트 형식으로 표시하되, 취득할 것인지 아닌지를 다른 조건문으로 분기해 구현할 것이다.https://blog.naver.com/sjy263942/222190704289[논리]1. 중복관리보석은 1~14개까지 가질 수 있다. 이때, 정점 번호가 100번까지 있는 것을 고려하면 보석이 취득된 장소가 1번에서 100번까지 커져버릴 수 있다. 따라서 islan.......

Level2 삼각 달팽이 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/68645필요한 로직 : 구현[논리]기존 삼각 달팽이 모형에서는 정수 기반으로 인덱스를 취급할 수 없다. 따라서, n*n배열을 선언하고 각 행에 좌측부터 원소가 채워지도록 재배치한다. 아래 그림의 빈 공간은 배열 상에서 -1로 접근할 수 없다고 선언했다. 이후로는 어떤 방향으로 오름차순 숫자들을 집어넣을 지 생각한다. 쭉 아래로 내려가며 삽입하다가 막히면 우측으로 이동, 다시 막히면 왼쪽 상위 방향으로 원소를 채워넣는다. 새로운 좌표를 생성할 3가지의 기준점을 잡았다. (1,0),(-1,0),(-1-1) 로 x,y의 delta를 삼아서 새로운 좌표로 쭉 이동킨다. 이러한 진행은 (1+2+...n)까지.......

1922번 네트워크 연결 [내부링크]

https://www.acmicpc.net/problem/1922필요한 로직 : 크루스칼 [배경]"컴퓨터들을 모두 연결, 연결 비용을 최소로 해야 한다" => 신장 트리 중 최소 신장 트리를 찾는 문제다. [논리]정점 간 사이클이 존재하지 않는다면 최소 비용으로 컴퓨터들을 이어야 한다. cost를 key로 해서 간선 정보들을 오름차순 정렬한 뒤, 순차적으로 사이클 존재 여부를 판별하며 mincost를 갱신한다.

Python 네임 스페이스 관리와 실행 속도 [내부링크]

들어가기 전에이 포스팅의 목적은 네임 스페이스에 대한 개념 전달이 아니다. 어떤 스코프에 접근해야 내가 짠 코드의 실행 속도를 높일 수 있을까?라는 질문에 답하기 위한 글이다.네임 스페이스?네임스페이스(namespace)란 프로그래밍 언어에서 특정한 객체(Object)를 이름(Name)에 따라 구분할 수 있는 범위를 의미한다. 파이썬 내부의 모든 것이 객체를 구성되어 있으므로, 객체명과 객체의 매핑을 모아둔 공간을 네임스페이스라고 한다.파이썬의 네임스페이스는 (통상) 크게는 3가지로 나뉜다. 1. 전역 네임스페이스: 모듈별로 존재하며, 모듈 전체에서 통용될 수 있는 이름들이 소속된다.2. 지역 네임스페이스: 함수 및 메서드 별로.......

11403번 경로 찾기 [내부링크]

https://www.acmicpc.net/problem/11403필요한 로직 : 플루이드 와샬[논리]1. 자신으로 가는 경로가 존재할 수 있기 때문에(사이클 존재 가능) arr[x][x]를 0으로 초기화하지는 않았다. 입력값에서 arr[i][j]==0인 경우에는 경로가 없다는 Infinity 처리를 한다.2. i->j 직진 경로 와( i->k + k->j )로 우회하는 경로를 비교해 최단 거리를 갱신한다. 최단 거리를 묻는 문제는 아니지만, INF가 아닌 위치라면 i와 j를 잇는 경로가 반드시 존재함을 의미한다.3. INF는 "경로 없음"을 의미하는 0, not INF는 "경로 있음"을 의미하는 1을 최종 출력한다.

1613번 역사 [내부링크]

https://www.acmicpc.net/problem/1613필요한 로직 : 유사 플루이드 와샬[배경]사건의 전후 관계를 파악해야 한다. 단, 사건의 전후 관계가 "모순"인 경우가 없다고 한다. 모순은 싸이클을 의미한다. 임진왜란이 일어난 후에 병자호란이 일어났는데, 병자호란이 일어난 이후 다시 임진왜란이 일어나는 것은 모순이기 때문이다. [논리]dist[v1][v2] : v1-> v2로 향하는 간선 정보가 담겨 있다. 최단 거리를 구할 필요가 없으므로, 방향을 토대로 두 정점이 이어져 있음을 1로 표시한다. 또한 Infinity로 경로 없음을 표현했던 보통의 경우와 달리, 이어질 수 없는 정점 관계는 0으로 초기화했다.배경에서 싸이클이 발생하지 않는.......

Level1 (kakao)키패드 누르기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67256필요한 로직 : 구현[논리]왼쪽/오른쪽 손가락 위치가 계속 바뀌므로 딕셔너리에 0~9번까지의 좌표 정보를 저장한 후 O(1)으로 바뀐 위치에 접근할 수 있도록 한다. 케이스는 크게 3가지의 경우로 나뉜다.1. 2,5,8,0 번호 입력을 담당할 손 찾기키번호와 손가락 위치 사이에 거리를 측정하고, 더 짧은 거리 안에 있는 손이 번호 입력을 담당하게 된다. 거리가 같을 때는 왼손/오른손 잡이인지를 알려주는 hand 변수를 활용해 최종적으로 사용할 손을 선택한다.2. 1,4,7 번호 입력을 담당하는 왼손3. 3,6,9 번호 입력을 담당하는 오른손1~3에 따라 손의 위치를 바꾸고, ans에 'R.......

1024번 수열의 합 [내부링크]

https://www.acmicpc.net/problem/1024필요한 로직 : 파라메트릭 서치[배경]문제 분류가 수학으로 되어있지만, 파라메틱 서치로 충분히 풀 수 있다. 만약 수학 공식을 이용하지 않거나, 파라메틱 서치로 풀지 않으면 슬라이딩 윈도우 형식으로 2~100 크기의 윈도우를 잡고 0~N//2 범위를 전부 탐색해야 하므로 비효율 혹은 불가능한 풀이가 될 것이다. [논리]합이 N이 되고, 수열의 길이가 L이상이 되는 가장 짧은 길이의 연속된 수열을 구해야 한다. "연속된" 이라는 힌트에서, 수열의 길이가 L, L+1, L+2... 가 될때 결국 수열의 구성은 for x in range(start,start+L)이 될 것임을 짐작할 수 있다. 그러면, 목표는 L을 오름차순.......

2531번 회전 초밥 [내부링크]

https://www.acmicpc.net/problem/2531필요한 로직 : 슬라이딩 윈도우[논리]회전 벨트 내에서 W크기의 고정된 윈도우를 잡고 계산하면 된다. 슬라이딩 윈도우는 window 가장 앞 원소를 delete하고 뒤쪽에 새로운 원소를 insert하는 것이 핵심이므로, 덱을 사용할 경우 head와 tail만 관리하면 된다.위처럼 덱을 구성할 수 있는 코드가 아래에 있다. 덱의 헤드를 버리고 새로운 dish를 추가하는 과정이다. 원형 인덱스에 접근하기 위해서 모듈러 연산으로 out of index 에러를 막아주었다. 그리고 슬라이딩 윈도우가 결국 투포인터 로직의 한 줄기이기 때문에 i가 end pointer, popleft()가 s포인터가 해야하는 일을 대신한다고 생각해도 좋다........

Level4 (kakao)동굴 탐험 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67260필요한 로직 : BFS 응용[배경]노드를 선행 노드가 필요한 노드 / 필요하지 않은 노드로 나누어 덱에 넣어야 한다는 점은 알았다. 그러나 선행 에서 후행 노드로 가는 중간 경로들에 다른 노드들이 존재할 수 있는데, 이 경우 어떻게 후행 노드까지의 방문을 보장할 수 있는지를 알 수 없었다. 결국, 다른 블로그들을 참고해 감을 잡았다. 아쉽다.[논리]위의 그래프에서 orders=[[8,5],[6,7],[4,1]] 라는 예시를 들어보자.5번 노드를 방문하기 위해 8번 노드를 방문해야 하고, 7번 노드를 방문하기 위해 6번 노드를 방문해야 하고, 1번 노드를 방문하기 위해 4번 노드를 방문해.......

Level1 (kakao)크레인 인형뽑기 게임 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/64061필요한 로직 : 스택 활용[논리]스택의 top을 살펴보면서 현재 잡고 있는 인형과 같은 인형이라면, stack에서 꺼내고 "두 인형이 터뜨려졌다"를 카운트하면 된다. 연쇄적인 bomb을 고려할 필요가 없는 기초적인 문제였다.

2447번 별 찍기-10 [내부링크]

https://www.acmicpc.net/problem/2447필요한 로직 : 재귀[논리]프랙탈 모형을 재귀적으로 생성하는 문제다. N*N 배열에 모두 '*'을 할당해두고 빈 공간으로 처리할 곳을 찾아가는 방식으로 해결했다. 가장 큰 N*N 사각형을 보면, (3^(k-1),3^(k-1))을 시작점으로 3^(k-1)만큼 가로, 세로로 이어진 범위를 모두 빈 공간으로 처리했다. ( 단, k: N=3^k ). 가장 큰 정사각형에서 빈 공간으로 처리할 곳을 선택하고 지웠다면, k를 1씩 줄여가며 "빈 공간을 찾을 사각형"의 범위를 줄여나갔다. i,j는 빈 공간을 만들 시작 좌표이며, r,c는 행/열 방향으로 길이 l만큼 원소를 지운다는 의미다. k가 0이 되면(=&#x.......

2448번 별 찍기 - 11 [내부링크]

https://www.acmicpc.net/problem/2448필요한 로직 : 재귀[배경]파이참에서 돌리면 문제가 없는데, 제출하면 "출력 형식이 잘못되었습니다"라고 떠서 굉장히 당황했다. 디버깅으로 진을 빼고 있을 때 채점 시스템이 잘못되어 있다는 댓글을 접했다. 그런데 나는 뒤에 공백을 미리 넣어놨어서 다른 사람들과 같은 오류는 아니었고, 트리 앞에 공백 하나가 포함되어 있어서 틀렸었다. 이 문제... 못 잊을 것 같다 ㅠㅠ [논리]1. 문제 해결에는 크게 두가지 단계로 접근했다. 첫번째로 아래 그림처럼, 트리의 가운데 부분을 공백으로 만들어야 한다. 이때, 트리의 높이 / 트리의 너비 / 비어져야 하는 구간의 시작점 이렇게 세가지를.......

1194번 달이 차오른다, 가자 [내부링크]

https://www.acmicpc.net/problem/1194필요한 로직 : BFS + 비트마스킹[배경]장기하와 얼굴들 노래를 흥얼거리며 풀었다. 노래 참 좋다! 이 문제에서 핵심은, 열쇠들의 상태 관리다. 특정 열쇠를 얻게 되면, 방문 처리했던 지나온 위치 모두를 다시 순회 가능한 공간으로 만들어야 한다. 즉 열쇠를 가지지 않은 상태에서 장소 A를 재방문하지 못하지만, 열쇠를 가지게 되면 A는 다시 방문 가능한 위치다. 왜 그럴까?예를 들어 이런 미로가 있을 때, 민식이가 위치한 0에서 바로 인접한 경로로 f로 갈 수도 있고 . 로 갈 수도 있다. 이때 f를 들려 0으로 다시 돌아오지 못하면 미로를 탈출할 수 없고, . 을 방문하게 되면 F에 대응되는 키가 없.......

Level3 (kakao)경주로 건설 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67259필요한 로직 : BFS 응용[논리]최단 거리가, 최소 비용을 보장하지 않는다. 이 문제의 핵심이다. BFS로 (0,0)->(N-1,N-1)까지 최단 경로를 찾아도 직선 거리를 이동시 비용이 100, 코너를 이동시 비용이 600이기 때문에 몇번 코너를 거쳐왔느냐에 따라서 최소 비용이 달라지게 된다.이러면 걸리는게 하나 있다. 중복 관리다. 통상 BFS에서는 지나온 경로를 True->False로 flag 처리하며 중복된 방문을 막는다. 그러나 이 문제의 경우 위치 X를 중복해 방문할 수 있는 조건을 열어줘야 한다. 아래 문제에서 키 집합의 상태에 따라 중복관리를 할 수 있도록 vis 배열을 3차원으.......

Level3 (kakao)외벽 점검 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60062필요한 로직 : 순열 + 덱 활용[배경]유사하다고 생각한 문제는 슬라이딩 윈도우로 풀었던 카카오-추석트래픽 문제였다. 물론 추석 트래픽 문제와 달리 윈도우 크기가 변하긴 하지만, 기본적인 접근이 "현재 내가 처리하는 구간"에 임의의 원소를 포함할 것이냐 아니냐를 파악하는 문제이기 때문이다. 추석 트래픽에서는 로그가 기록된 시점으로 구간의 시작점들을 잡았다면, 이 문제는 취약점을 시작점들로 잡고 생각하면 된다.[논리]1. 원형 구간을 직선 구간으로 변환모듈러 연산은 n이 12라고 할때 특정 수의 나머지(== x%n)를 기반으로 12,24,36... 등등을.......

Level4 (kakao)블록 게임 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42894필요한 로직 : 구현[논리]주어진 블록 타입에서 검은 돌을 떨어뜨려 2x3, 3x2 직사각형을 만들 수 있는 케이스는 5가지이다.따라서, (1) 블록의 타입이 위 5가지 중 하나인지 확인하고(2) 검은 돌이 "떨어질 수 있도록" 검은 돌 상위 좌표들에 다른 블록이 없는지 확인한다.블록의 타입을 알기 위해서는 시작점과 상대 지표를 활용했다. 검은 돌은 위에서 아래로 떨어지되, 기본적으로는 좌측에서 우측으로 열을 이동하며 떨어뜨린다. 따라서, 시작점을 블록의 가장 왼쪽 좌표로 잡았다.또한 함수 is_possible로 검은 돌이 정상적으로 떨어질 수 있는지 확인했다.아래 케.......

Level3 (kakao)길 찾기 게임 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42892필요한 로직 : 이진 트리[배경]트리 순회 변경, 복원에는 보통 분할 정복으로 접근해왔다. 그런데 이 문제는 왼쪽, 오른쪽 서브 트리를 구성할 수 있는 원소들을 두 구간으로 분할할 수 있는 문제가 아니다. 따라서 문제에서 제공한 x,y 좌표에 따른 힌트를 바탕으로 트리를 구성해본다.[논리]1. 루트를 찾아라아래 그림을 보면 y좌표가 큰 순서대로 최상위 루트를 구성하고 있으며, 최상위 루트인 7보다 y가 작으며 x가 작은 노드들이 왼쪽 서브트리를 구성한다. 반대로 7보다 y가 작으며 x가 큰 노드들이 오른쪽 서브트리를 구성한다. 그렇다면, y가 작아질 수록 트리의 레벨이 1.......

10282번 해킹 [내부링크]

https://www.acmicpc.net/problem/10282필요한 로직 : 다익스트라[논리]컴퓨터간 전염은 최단 시간에 이루어진다. 예를 들어, 아래 그래프 노란색 영역에서 1->3번 컴퓨터로 3초 내 감염되기 전에 이미 1->2->3 컴퓨터를 거쳐 2초만에 감염이 이루어진다. 최단 시간 내 감염된다고 해도, 우리가 구해야 할 것은 마지막 컴퓨터까지 감염된 시간이다. 즉 노드간 최단 거리 이동은 보장하되, 의존관계에 놓인 모든 컴퓨터가 다 전염된 시간을 뽑아야 한다. 결국 1->2->3->5까지의 전염은 3초만에 이루어졌지만, 6번 컴퓨터까지 전염되기 위해 소요된 시간은 총 5이다. 따라서 처음 해킹당한 컴퓨터에서 X컴퓨터까지 감염되는.......

비트마스크 [내부링크]

비트 마스크정수의 이진수 표현을 자료 구조로 쓰는 기법을 비트마스크(bitmask)라고 부른다. 비트마스크가 자료구조라고 할 수는 없지만, 비트마스크를 사용하면 다양한 연산을 다른 자료구조보다 더 빠르고, 간결하고, 적은 메모리를 사용해 가능하게 한다. 그 이유는 CPU는 이진수를 이용해 모든 자료를 표현하기 때문이다. 내부적으로 이진수를 사용한다면 이진법 관련 연산들은 빠르게 수행될 수 있다는 점을 이용한 것이다. 비트 연산과 활용* 아래 블로그에서 배운 내용 정리https://shoark7.github.io/programming/knowledge/some-useful-bit-tricks-and-usages

14889번 스타트와 링크 [내부링크]

https://www.acmicpc.net/problem/14889필요한 로직 : 비트마스킹[배경]예전에 이 문제를 itertools의 combinations로 간단하게 풀었는데, 비트마스크 연습도 할 겸 다시 풀었다.https://blog.naver.com/sjy263942/222026074971[논리]- nCm전체 인원을 두 팀으로 나누는게 핵심이다. 즉 N명의 인원 중 M(==N//2)명을 뽑아 스타트팀에, 나머지 N//2명은 링크팀에 배치한다. 전체 인원이 4명이라고 한다면, [0,1,2,3] => [start,start,link,link]와 같이 스타트팀 혹은 링크팀으로 소속 집합을 구분하는 0 or 1 문제이기 때문에 비트마스크로 해결할 수 있다. 정확히 M명으로 팀을 나눈다는 점에서 count_bit 함수로 1비트의 개.......

1561번 놀이공원 [내부링크]

https://www.acmicpc.net/problem/1561필요한 로직 : 파라메트릭 서치[배경]구해야 답은 마지막 아이가 타게 되는 놀이기구의 번호이다. 그러나 놀이기구 번호 범위가 1~1만, 전체 인원은 1~20억인 점을 보면 놀이기구 번호를 단순히 targeting할 수 있는 문제가 아니다. 그러면 문제를 바라보는 시야를 넓혀보자. 만약 마지막 인원까지 모두 탑승 완료된 시간 t를 구할 수 있다면, t시간에 마지막 아이가 몇번째 놀이기구를 탔는지 추적할 수 있을 것 같다. [논리]0. 이분탐색으로 마지막 인원이 탑승한 시간 t를 타겟팅한다. 결정함수로 현재 t시간까지 탑승한 인원이 전체 인원보다 크다면 t를 줄이고, 전체 인원보다 작다면 t를 늘리도록.......

5639번 이진 검색 트리 [내부링크]

https://www.acmicpc.net/problem/5639필요한 로직 : BST+분할정복[논리]전위 순회 결과에서 이진 검색 트리를 복원할 수 있는, 분할의 기준이 될 인덱스를 잡으며 트리를 순회하면 된다. 루트의 값보다 작은 원소들은 왼쪽 서브트리를 구성하는 노드들이고, 큰 원소들은 오른쪽 서브트리를 구성하는 노드들이다. 따라서 전위 순회 결과에서 root값보다 더 큰 값이 나오면 그때의 인덱스를 div_idx로 놓고 왼쪽, 오른쪽 서브트리 후보군들을 분할하다가 더 이상 담을 후보군이 없을 때 후위 순회 기준으로 노드 번호를 출력하며 정복한다. [주의]pypy3로 제출하면 런타임에러가 뜬다. 기본적으로 파이썬의 최대 재귀 깊이는 1000이다. 그래서 이.......

Python 프로파일링 (for loop vs sum()) [내부링크]

프로파일링의 필요성?파이썬 인터프리터의 경우 컴퓨터 구성 요소를 추상화 해두었다. 배열을 위한 메모리 할당, 메모리 정렬, CPU로 데이터 보내는 순서 등 개발자가 고민할 필요가 없게 설계되어 있다. 그러나 고민할 필요가 없다는 의미는, 성능상 비용을 치르고 있을 수 있다는 말이다. 한 예로, 파이썬이 메모리를 자동으로 할당하고 해제하는 GC(Garbage-Collection) 사용하면 CPU 캐시에 데이터 전송하는데 영향을 미치는 메모리 단편화를 일으킨다. 그외 파이썬은 동적 타입 언어이며, GIL (Global Interpreter Lock)과 같은 최적화 알고리즘이 제대로 수행되기 어려운 환경에 있기도 하다. (Cpython이 등장하게 된 이유와도 상통한다.......

1068번 트리 [내부링크]

https://www.acmicpc.net/problem/1068필요한 로직 : 트리 순회(DFS)[배경]서브 트리를 삭제하는 과정에 DFS를 사용했다. 아래 그림처럼 4번 노드를 삭제하게 되면, 그 하위 노드들인 5,6,7,8 노드들은 모두 삭제되어야 한다. 따라서, 4번 노드를 부모로 가진 6번 노드를 지우고, 6번 노드를 부모로 가진 7번 노드를 지우고... 등등 재귀적으로 노드를 삭제하는 과정이 이어진다. 이렇게 삭제 후 parents 테이블을 -1로 삭제했습니다! 라고 명시해주면, 그 이후에 leaf 노드들을 찾으면 될 것 같다. [논리]1. removal 노드를 기준으로 서브 트리를 모두 삭제한다. 인덱스는 노드 번호인 점을 감안해서 parents[i]에 현재 이 노드는 삭제되었.......

1967번 트리의 지름 [내부링크]

https://www.acmicpc.net/problem/1967필요한 로직 : BFS[논리]아래 문제와 완전히 같은 문제다. 입력값만 다르게 받고 양방향 그래프로 만들면 문제없이 해결된다. https://blog.naver.com/sjy263942/222181213384

Level3 (kakao)징검다리 건너기 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/64062필요한 로직 : 파라메트릭 서치[배경지식]이분 탐색 문제가 "찾는 값이 존재하는가? lower bound, upper bound는 무엇인가?"를 조건에 맞게 찾는 최적화 문제라면, 파라메트릭 서치의 경우 이분 탐색을 응용해 최적화 문제를 "결정문제"로 바꾼다. 조건에 맞는 후보군을 찾을 때 이분 탐색을 사용하되, 그 중 "가장 알맞는 값을 오차 범위 내에서 찾는다"는 의미다. [배경]보통 이분탐색/파라메트릭 서치 문제에서 정렬된 수들에서 target값을 찾아가는데, 이 문제의 경우에는 입력값 정렬이 필수 조건이 아님을 알 수 있었다. 주요한 조건은 한명씩.......

블로그 시작 [내부링크]

취업 준비를 하면서 느낀 점은, 기업이 나를 좋아하도록 만드는 게 중요하단 것.인성이 아무리 좋아도,...

카카오뱅크 [내부링크]

카카오뱅크는 크게 두가지 특징으로 정리할 수 있다.1. 인터넷 전문은행- 리스크 관리, 리테일 부문에 ...

Level2 탑 [내부링크]

스택을 이용한 문제1. 아래 방향으로 탐색만 함 (pop이 아님) 2. 자신보다 작은 인덱스에 한해서 그 값이 ...

Level2 프린터 [내부링크]

20% 맞은 코드100% 맞은 코드큐가 빌때까지 popleft하는 과정에서1. 조건에 부합하지 않는 애는 다시 ...

Level2 다리를 지나는 트럭 [내부링크]

두개의 큐를 써서 해결1. Q : 트럭들. 하나씩 앞에서 빼면서 다리 위에 올려놔야2. curr : 다리의 길이...

이벤트 기반 아키텍처에 효과적인 트래픽 관리 [내부링크]

참고사이트 https://tech.kakao.com/2020/06/08/websocket-part1/Alex 댓글: 카카오의 서비스들이 ...

Django + React 추천시스템 보완 [내부링크]

지난 3~4월 달에 사용자의 맛집 리뷰데이터들을 분석해, 음식점들을 크게 8개의 분위기를 가진 음식점들...

Django 와 Spring 비교 - 개인적 견해 [내부링크]

참고사이트https://medium.com/deliverytechkorea/from-java-to-python-eb3a877e53a3나는 백엔드 ...

SQL vs NoSQL (MySQL vs. MongoDB) + Oracle vs MySQL vs PostgreSQL [내부링크]

참고사이트https://siyoon210.tistory.com/130https://velog.io/@jisoo1170/Oracle-MySQL-Postgr...

Docker로 배포 (Spring boot - mvn 빌드) [내부링크]

기본 준비- 도커 설치 - spring boot (mvn) 패키징한 프로젝트 준비 1. pom.xml에 docker 의존성 ...

5585번 [내부링크]

https://www.acmicpc.net/problem/5585

11047번 [내부링크]

https://www.acmicpc.net/problem/11047

11399번 [내부링크]

https://www.acmicpc.net/problem/11399

2217번 [내부링크]

https://www.acmicpc.net/problem/2217최대 중량 = 로프들의 수용 중량을 오름차순으로 정렬 뒤, ...

1138번 [내부링크]

https://www.acmicpc.net/problem/1138다른 사람들은 쉽다고 했지만, 나는 그리디 논리를 잘 못잡아서 애...

1541번 [내부링크]

https://www.acmicpc.net/problem/1541풀이55 - 50 + 40 == 55 - (50 + 40) == ...

10610번 [내부링크]

https://www.acmicpc.net/problem/10610풀이(핵심)3의 배수 == 각 자리수의 합이 3의 배수...

Docker Compose란(1) [내부링크]

도커 컴포즈로 개발환경 구성하기실제로 한 어플리케이션을 돌리기 위해서는 redis 컨테이너, MySQL...

프로세스와 데몬 [내부링크]

리눅스를 다루다보면 systemctl이라는 용어를 사용하는데, 시스템에 상주시킨다 / 데몬모드로 실행한다가...

AWS EC2 + Docker + Redis(1) [내부링크]

우선적으로, EC2 서비스 환경이 아닌 로컬 도커를 활용해서 Redis에 대한 감을 잡겠다.Redis란?...

1946번 [내부링크]

계속 시간초과 나서 정말 힘들었던 문제 문제를 잘 읽고, 그리고 연산 횟수를 최대한 줄이는 법을 선택해야...

2437번 [내부링크]

https://www.acmicpc.net/problem/2437이 문제는 개인적으로는 논란의 여지가 있는 문제라고 생각한다....

1969번 [내부링크]

https://www.acmicpc.net/problem/1969딕셔너리의 값을 기준으로 sort하는 방법sorted(dic, key&#x3...

2812번 [내부링크]

https://www.acmicpc.net/problem/2812필요한 로직1. 시간이 1초로 제한되어 있는데, (1 ≤ K < N ...

1931번 [내부링크]

https://www.acmicpc.net/problem/1931회의실 배정을 탐욕기법으로 접근한다.회의시간을 어떻게 조정해야...

1080번 [내부링크]

https://www.acmicpc.net/problem/1080이 문제에 대한 접근이 어려웠는데, 정말 잘 정리된 사이트를 참고...

12015번 가장 긴 증가하는 부분수열2 [내부링크]

https://www.acmicpc.net/problem/12015소스코드이 문제는 LIS(최장증가부분수열) 문제이다.필요한 ...

1202번 [내부링크]

https://www.acmicpc.net/problem/1202런타임에러힙에 아무것도 안들어있으면 (훔칠 보석이 없었으면) out ...

1744번 [내부링크]

https://www.acmicpc.net/problem/1744필요한 로직1. 두개의 수를 묶거나 묶지 말아야 한다.음수의 경우 ...

2875번 [내부링크]

https://www.acmicpc.net/problem/2875필요한 로직1. 전체 여자, 남자 수에서 각각 팀빌딩에 필요한 2...

10828번 [내부링크]

https://www.acmicpc.net/problem/10828

9012번 [내부링크]

https://www.acmicpc.net/problem/9012필요한 로직'('은 stack에 push하고, ')'는 s...

11652번 [내부링크]

https://www.acmicpc.net/problem/11652정답1 정답2 - 시공간 복잡도 줄인 코드itemgetter을 쓴 이유딕셔...

2309번 [내부링크]

https://www.acmicpc.net/problem/2309정답

3085번 [내부링크]

https://www.acmicpc.net/problem/3085필요한 로직1. 두 수를 교환 (swap)한다. 가로(열 기준)으로 교...

1476번 [내부링크]

https://www.acmicpc.net/problem/1476주의사항예를 들어, 나머지가 15인 15의 배수는 '나머지 0&...

14500번 [내부링크]

https://www.acmicpc.net/problem/14500정답필요한 로직 : DFS+백트래킹핑크색의 ㅜ 모양을 제외하...

9095번 [내부링크]

https://www.acmicpc.net/problem/9095필요한 로직 : DP예를 들어, N = 4를 만드는 경우의 수...

10972번 [내부링크]

https://www.acmicpc.net/problem/10972정답필요한 로직next_permutation을 구현한다. 단순 Factorial...

10973번 [내부링크]

https://www.acmicpc.net/problem/10973정답https://blog.naver.com/sjy263942필요한 로직이 문제는 ...

10974번 [내부링크]

https://www.acmicpc.net/problem/10974정답필요한 로직 : DFS굳이 depth를 안구하고, vis에 False...

10819번 [내부링크]

https://www.acmicpc.net/problem/10819정답

10971번 [내부링크]

https://www.acmicpc.net/problem/10971정답필요한 로직 : DFSDFS는 모든 순열을 구하는 것과 같다...

14501번 [내부링크]

https://www.acmicpc.net/problem/14501정답필요한 로직 : DP←진행방향1. 역순으로 탐색을 시작한다...

14889번 [내부링크]

https://www.acmicpc.net/problem/14889정답필요한 로직1. 팀을 나눈다.2. 나눈 팀의 능력치를 각각 더...

2529번 [내부링크]

https://www.acmicpc.net/problem/2529정답필요한 로직 : DFS1. nums에는 0~9까지 들어있고, 여기서...

1182번 [내부링크]

https://www.acmicpc.net/problem/1182정답필요한 로직 : DFS - 조합1. depth가 1~N까지 가변적이다. m...

14391번 [내부링크]

https://www.acmicpc.net/problem/14391소스 코드필요한 로직 : 비트마스크1. N,M의 범위는 1~4이므...

1463번 [내부링크]

https://www.acmicpc.net/problem/1463소스 코드필요한 로직 0. 2나 3으로 나누어 떨어져도, 1을 빼는 것...

11052번 [내부링크]

https://www.acmicpc.net/problem/11052소스 코드필요한 로직D[n] = n개의 카드를 갖기 위해 지불하...

16194번 [내부링크]

https://www.acmicpc.net/problem/16194소스 코드필요한 로직https://blog.naver.com/sjy263942최대를 최소...

15990번 [내부링크]

https://www.acmicpc.net/problem/15990필요한 로직1. D[i][j]- i는 1, 2, 3 중 어떤 수를 기준으로 합을 ...

가상환경 잡는 습관 [내부링크]

Mac OS 기준프로젝트마다 다른 버전의 파이썬을 사용하는 경우가 있는데,virtualenv로 가상환경을 만들...

6603번 [내부링크]

https://www.acmicpc.net/problem/6603소스 코드필요한 로직DFS 기본코드로 해결 가능하다.주의사항입...

14225번 [내부링크]

https://www.acmicpc.net/problem/14225소스코드필요한 로직1. DFS (조합 구현)입력 값이 아래와 같다면...

1969번 [내부링크]

https://www.acmicpc.net/problem/1339소스코드필요한 로직1. 9~0의 숫자를 배치할 우선순위를 구하기입...

14888번 [내부링크]

https://www.acmicpc.net/problem/14888소스코드필요한 로직1. DFS 기본코드2. 연산값의 누적[1, 2, 3, ...

16948번 [내부링크]

https://www.acmicpc.net/problem/16948소스코드필요한 로직BFS 기본 코드(depth를 활용한 최단거리 문...

9663번 [내부링크]

https://www.acmicpc.net/problem/9663소스코드필요한 로직1. 백트래킹 : DFS2. 아래와 같이 '왼쪽...

1987번 [내부링크]

https://www.acmicpc.net/problem/1987소스코드필요한 로직1. DFS2. bins : 26자리 배열 확보 - A(0),...

10026번 [내부링크]

https://www.acmicpc.net/problem/10026소스코드필요한 로직 : BFS0. bfs 시간 복잡도 O(V+E)와, N&...

1963번 [내부링크]

https://www.acmicpc.net/problem/1963소스코드필요한 로직 : BFS1. 소수 판별 : "에라토스테네스...

14502번 연구소 [내부링크]

https://www.acmicpc.net/problem/14502소스코드필요한 로직 : DFS + BFS1. setwall : depth가 3인 ...

16236번 아기상어 [내부링크]

https://www.acmicpc.net/problem/16236소스코드필요한 로직1. 절차 1. 자기보다 큰 물고기면 지날 수 없음...

2206번 벽 부수고 이동하기 [내부링크]

https://www.acmicpc.net/problem/2206소스코드필요한 로직 : BFS + DP1. 벽을 부순다는 의미?통상, a...

3055번 탈출 [내부링크]

https://www.acmicpc.net/problem/3055소스코드필요한 로직 : BFS (두개의 큐를 활용)1. 물을 퍼뜨린...

16954번 움직이는 미로 탈출 [내부링크]

https://www.acmicpc.net/problem/16954소스코드필요한 로직 : BFS + 두개의 큐0. 3가지 상태'O&#...

1786번 찾기(KMP알고리즘) [내부링크]

https://www.acmicpc.net/problem/1786소스코드입력예시필요한 로직 : KMP0. 왜 KMP? - 연산속도가...

14426번 접두사 찾기 [내부링크]

https://www.acmicpc.net/problem/14426소스코드주의사항text와 pattern 그리고 pattern의 문자열 길이를 ...

1701번 Cubeditor [내부링크]

https://www.acmicpc.net/problem/1701소스코드필요한 로직 : KMP0. 구해야 하는 수 : 주어진 입력에서 ...

16916번 부분 문자열 [내부링크]

https://www.acmicpc.net/problem/16916 앞선 두 문제 풀이와 동일하게, KMP로 해결가능하다.

5052 전화번호 목록 [내부링크]

https://www.acmicpc.net/problem/5052소스코드필요한 로직1. patterns을 정렬한다.2. i-1 요소가 i 요소의...

11559번 Puyo Puyo [내부링크]

https://www.acmicpc.net/problem/11559소스코드필요한 로직 : 응용 BFS0. 전체 배열(arr) 탐색을 무...

14503번 로봇청소기 [내부링크]

https://www.acmicpc.net/problem/14503소스코드필요한 로직 1. 로봇은 기존에 바라보던 방향을 왼쪽으로 t...

15685번 드래곤 커브 [내부링크]

https://www.acmicpc.net/problem/15685필요한 로직 : STACK 활용1. 방향을 알고, 방향(d)에 따라 인...

17144번 미세먼지 안녕 [내부링크]

https://www.acmicpc.net/problem/17144필요한 로직 : deepcopy의 활용0. 배열의 활용 - deepcopyarr : 1...

16234번 인구 이동 [내부링크]

https://www.acmicpc.net/problem/16234소스코드필요한 로직 : BFS0. 연합을 이루는 국가들을 한번...

9935번 문자열 폭발 [내부링크]

https://www.acmicpc.net/problem/9935소스코드필요한 로직 : STACK0. 지나온 문자열은 모두 스택에 ...

2941번 크로아티아 알파벳 [내부링크]

https://www.acmicpc.net/problem/2941소스코드필요한 로직 : 완전탐색1. text 순회2. pattern 순회3. patt...

4949번 균형잡힌 세상 [내부링크]

https://www.acmicpc.net/problem/4949소스코드필요한 로직 : STACK1. append : '(' or &#x...

1062번 가르침 [내부링크]

https://www.acmicpc.net/problem/1062소스코드필요한 로직 : 응용 dfs(조합)0. "anta"로 시...

9933번 민균이의 비밀번호 [내부링크]

https://www.acmicpc.net/problem/9933필요한 로직 : 팰린드롬 응용1. 홀수 길이의 문자열이므로, 가운데 ...

1919 애너그램 만들기 [내부링크]

https://www.acmicpc.net/problem/1919필요한 로직0. 같은 단어를 같은 횟수만큼만 사용한다. 1-1. a~z의 ...

5525번 IOIOI [내부링크]

https://www.acmicpc.net/problem/5525필요한 로직 : KMP 유사 로직0. KMP로 풀면 시간초과가 난다...

9996번 한국이 그리울 땐 서버에 접속하지 [내부링크]

https://www.acmicpc.net/problem/9996소스코드필요한 로직1. target : * 을 기점으로 왼쪽 순회, 오른...

2816번 디지털 티비 [내부링크]

https://www.acmicpc.net/problem/2816소스코드필요한 로직 : 그리디1. KBS1, KBS2가 위치한 인덱...

2799번 블라인드 [내부링크]

https://www.acmicpc.net/problem/2799소스코드필요한 로직1. 창문이 시작되는 위치를 찾는다.2. 행만 ...

10546번 배부른 마라토너 [내부링크]

https://www.acmicpc.net/problem/10546소스코드필요한 로직 : 해시맵(파이썬 dict)1. 참여한 마라토너...

2897번 몬스터 트럭 [내부링크]

https://www.acmicpc.net/problem/2897소스코드필요한 로직1-1. 벽이 아닌 경우, 오른쪽/아래/오른쪽+아...

1296번 데이트 [내부링크]

https://www.acmicpc.net/problem/1296소스코드필요한 로직1. 단순한 문자 카운팅. L,O,V,E를 만나면...

2002번 추월 [내부링크]

https://www.acmicpc.net/problem/2002소스코드필요한 로직 : Deque1. in_tunnel, out_tunnel은 각각 들...

2866번 문자열 잘라내기 [내부링크]

https://www.acmicpc.net/problem/2866소스코드필요한 로직 : 이분탐색1. 행을 기준으로 이분탐색을 진...

2890번 카약 [내부링크]

https://www.acmicpc.net/problem/2890소스코드필요한 로직0. 단순한 문자열 처리1. F가 아닌 열의 두번...

1544번 사이클 단어 [내부링크]

https://www.acmicpc.net/problem/1544소스코드필요한 로직1. words에는 시계방향으로 읽었을 때 같은 ...

3077번 임진왜란 [내부링크]

https://www.acmicpc.net/problem/3077소스코드필요한 로직 : 해시맵 + 조합1. 정답과 현우의 답안을 각...

2800번 괄호제거 [내부링크]

https://www.acmicpc.net/problem/2800필요한 로직 : 스택 + 비트마스크 기법0. I에는 짝으로 묶이는 괄...

Level3 2xn타일링 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12900소스코드필요한 로직 : DP (Top-Down)1...

Level3 네트워크 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43162소스코드1 (현재코드)필요한 로직 : BFS방문...

Level3 단어변환 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43163소스코드1 (현재 코드)필요한 로직 : BFSB...

Level3 입국심사 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43238소스코드1 (현재 풀이)필요한 로직 : 이분탐색...

Level3 여행경로 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43164소스코드1(현재 풀이) - 시간 단축소스코드2(예...

Level3 등굣길 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42898소스코드필요한 로직 : DP0. 최단 길이...

Level3 N으로 표현 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42895소스코드필요한 로직 : DFS0. N을 최대...

Level3 단속카메라 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42884?language=python3소스코드필요한 로직...

Level3 이중우선순위큐 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42628소스코드필요한 로직 : 우선순위큐1. heapq는...

Level3 가장긴팰린드롬 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12904소스코드필요한 로직 1. 팰린드롬이 될 수 있...

Level3 거스름돈 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12907소스코드필요한 로직 : DP<EXAMP...

Level3 섬 연결하기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42861소스코드필요한 로직 : 최소신장트리1. edges...

Level3 가장 먼 노드 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/49189소스코드필요한 로직 : BFS1. 인접 리스트...

Level3 정수 삼각형 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43105소스코드필요한 로직 : DP트리를 순회하되,...

Level3 베스트앨범 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42579소스코드1소스코드2필요한 로직 : HASH...

Level3 순위 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/49191소스코드필요한 로직 : 플로이드 와샬1. 플...

Level3 멀리뛰기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12914소스코드필요한 로직 : DP* 만들어야 하...

Level3 줄 서는 방법 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12936소스코드필요한 로직 : 순열0. DFS로 풀...

Level3 NQueen [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12952소스코드필요한 로직 : 백트래킹0. 문제의 제...

Level3 야근지수 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12927소스코드필요한 로직 : 우선순위큐1. a^2 + b...

Level3 최고의 집합 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/12938소스코드필요한 로직* 앞선 "야근지수&q...

Level3 (kakao)자물쇠와열쇠 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60059소스코드필요한 로직 : 2차원 배열 응용0. N...

Level2 (kakao)문자열 압축 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60057필요한 로직0. 다음 번에 코드 리팩토링을 해...

Level2 (kakao)멀쩡한 사각형 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/62048소스코드필요한 로직 * 최대 공약수를 활용...

Level2 (kakao)스킬트리 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/49993소스코드필요한 로직 0. 알파벳 아스키코드를...

Level2 (kakao)괄호변환 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60058소스코드필요한 로직 : 구현문제에서 나온 모...

Level2 (kakao)튜플 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/64065소스코드필요한 로직 : 문자열 처리0. MAI...

Level2 (kakao)뉴스 클러스터링 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17677소스코드필요한 로직 1. 문자열 전처리대문자...

Level2 (kakao)캐시 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17680소스코드필요한 로직 : 큐 활용1. LRU는 ...

Level2 (kakao)오픈채팅방 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42888소스코드필요한 로직 : 해시1-1. D는 Hash...

Level2 (kakao)프렌즈4블록 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17679소스코드필요한 로직 0. 백준의 Puyo Puyo ...

Level2 (kakao)후보키 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42890소스코드필요한 로직1. 유일성, 최소성 만족...

Level2 (kakao)[3차]압축 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17684소스코드필요한 로직 : 해시1. 해시맵 역할...

Level2 (kakao)[3차]n진수 게임 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17687소스코드필요한 로직 : n진법 변환1. 진법 변...

Level2 (kakao)[3차]파일명 정렬 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17686소스코드필요한 로직 : 삽입정렬1. cut 함수...

Level2 (kakao)[3차]방금그곡 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17683소스코드필요한 로직1. 문자열 순회에 앞서서...

Level3 (kakao)[1차]추석 트래픽 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17676소스코드필요한 로직1. 시작 시간들을 모두 ...

Level3 (kakao)기둥과 보 설치 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60061소스코드필요한 로직1. 입력값 대로 보와 기...

Level3 (kakao)[1차]셔틀버스 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17678소스코드필요한 로직 0. 하드코딩했다. 1...

Level3 (kakao)징검다리 건너기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/64062소스코드필요한 로직 : 이분탐색0. stones의 ...

Level4 (kakao)호텔 방 배정 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/64063소스코드필요한 로직 : union-find 알고리즘1...

11053번 가장 긴 증가하는 부분수열 [내부링크]

https://www.acmicpc.net/problem/11053소스코드필요한 로직 : DP1.D[i] = (N_list[i]보다 ...

12738번 가장 긴 증가하는 부분 수열3 [내부링크]

https://www.acmicpc.net/problem/12738소스코드필요한 로직 : LIS백준 12015번과 똑같다.https://blo...

11055번 가장 큰 증가 부분 수열 [내부링크]

https://www.acmicpc.net/problem/11055소스코드필요한 로직 : LIS* 같은 문제https://blog.naver.com...

2573번 빙산 [내부링크]

https://www.acmicpc.net/problem/2573소스코드필요한 로직 : 완전탐색(덱 이용)0. ssafy에 처음 들어갔...

1208번 부분수열의합2 [내부링크]

https://www.acmicpc.net/problem/1208소스코드필요한 로직 : 해시맵 + 비트마스킹1. 시간 초과를 방지하...

2003번 수들의 합2 [내부링크]

https://www.acmicpc.net/problem/2003소스코드필요한 로직 : Two Pointers Algorithm1. 모든 원소는 ...

2075번 N번째 큰 수 [내부링크]

https://www.acmicpc.net/problem/2075소스코드필요한 로직 : HEAP + 슬라이딩 윈도우1. N번째 큰 ...

17069번 파이프 옮기기2 [내부링크]

https://www.acmicpc.net/problem/17069소스코드(정답)소스코드(시간초과 - 로직은 정답코드와 같음)필요한...

2343번 기타레슨 [내부링크]

https://www.acmicpc.net/problem/2343소스코드1 (현재풀이)필요한 로직 : 이분탐색M개로 그룹핑 될 수 ...

2805번 나무자르기 [내부링크]

https://www.acmicpc.net/problem/2805소스코드필요한 로직 : 이분탐색0. 값을 조절하는 이분탐색이다. ...

10816번 숫자카드2 [내부링크]

https://www.acmicpc.net/problem/10816소스코드필요한 로직 : HashMap + 이분탐색0. 전형적인 이분탐...

2512번 예산 [내부링크]

https://www.acmicpc.net/problem/2512소스코드필요한 로직 : 이분탐색0. 값을 찾는 이분탐색이다. 주의...

2110번 공유기 설치 [내부링크]

https://www.acmicpc.net/problem/2110소스코드1소스코드2필요한 로직 : 이분탐색0. 찾아야 할 값(targ...

1260번 DFS와 BFS [내부링크]

https://www.acmicpc.net/problem/1260소스코드필요한 로직0. 간선 정보를 통해 양방향 그래프를 만든다....

2178번 미로탐색 [내부링크]

https://www.acmicpc.net/problem/2178소스코드필요한 로직 : BFS0. 가장 빠르게 도착하고, 최단 거리...

2606번 바이러스 [내부링크]

https://www.acmicpc.net/problem/2606소스코드필요한 로직 : union-find OR bfs0. 더 익숙한 방법이 b...

1806번 부분합 [내부링크]

https://www.acmicpc.net/problem/1806소스코드필요한 로직 : Two Pointers Algorithm0. 아래 문제와 ...

1495번 기타리스트 [내부링크]

https://www.acmicpc.net/problem/1495소스코드필요한 로직 : DP0. 점화식 생성1. EXAMPLE - me...

7576번 토마토 [내부링크]

https://www.acmicpc.net/problem/7576소스코드필요한 로직 : bfs0. 전형적인 bfs + depth를 구하는 문제...

11724번 연결 요소의 개수 [내부링크]

https://www.acmicpc.net/problem/11724소스코드필요한 로직 : union-find OR bfs0. 익숙한 bfs 말고 u...

1753번 최단경로 [내부링크]

https://www.acmicpc.net/problem/1753소스코드필요한 로직 : 다익스트라0. 시작 정점 S가 있고, 음의 ...

1261번 알고스팟 [내부링크]

https://www.acmicpc.net/problem/1261소스코드필요한 로직 : 다익스트라 0. 인접행렬에서 비용 정보를 ...

1238번 파티 [내부링크]

https://www.acmicpc.net/problem/1238소스코드필요한 로직 : 다익스트라0. 모든 정점에 대해서 최단 시...

1504번 특정한 최단 경로 [내부링크]

https://www.acmicpc.net/problem/1504소스코드필요한 로직 : 다익스트라0. 양방향 그래프가 전제된다. ...

4485번 녹색 옷 입은 애가 젤다지? [내부링크]

https://www.acmicpc.net/problem/4485소스코드필요한 로직 : 다익스트라* 아래 문제와 똑같은 로직으로 ...

1300번 k번째 수 [내부링크]

https://www.acmicpc.net/problem/1300소스코드필요한 로직 : 이분탐색0. 혼자 힘으로 못풀었다. 아래 사...

2352번 반도체설계 [내부링크]

https://www.acmicpc.net/problem/2352소스코드1 - 이분탐색 (820ms)소스코드2 - DP(7732ms)필요한 로직 ...

7453번 합이 0인 네 정수 [내부링크]

https://www.acmicpc.net/problem/7453소스코드1 - 해싱소스코드2 - 해싱 + 투포인터필요한 로직 : 해싱 ...

[D4]1953번 탈주범 검거 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlK...

1516번 게임개발 [내부링크]

https://www.acmicpc.net/problem/1516소스코드필요한 로직 : 위상정렬0. 이 문제를 보고 커리큘럼, 로드...

2623번 음악프로그램 [내부링크]

https://www.acmicpc.net/problem/2623소스코드필요한 로직 : 위상정렬0. 입력에서 그래프만 잘 정리하면...

1197번 최소 스패닝 트리 [내부링크]

https://www.acmicpc.net/problem/1197소스코드필요한 로직 : 크루스칼0. 크루스칼 알고리즘최소 신장 트...

1939번 중량제한 [내부링크]

https://www.acmicpc.net/problem/1939소스코드필요한 로직 : 이분탐색 + BFS0. 나에겐 너무 어려웠다...

1389번 케빈 베이컨의 6단계 법칙 [내부링크]

https://www.acmicpc.net/problem/1389소스코드필요한 로직 : 플루이드 와샬0. 플루이드 와샬만 구현하면...

1644번 소수의 연속합 [내부링크]

https://www.acmicpc.net/problem/1644소스코드필요한 로직 : 투포인터 + 에라토스테네스의 체0. 크게 두...

2470번 두 용액 [내부링크]

https://www.acmicpc.net/problem/2470소스코드필요한 로직 : 투 포인터 알고리즘0. N_list가 모두 음수...

1789번 수들의 합 [내부링크]

https://www.acmicpc.net/problem/1789소스코드필요한 로직 : 이분탐색0. 서로 다른 n개의 자연수의 합이...

2015번 수들의 합4 [내부링크]

https://www.acmicpc.net/problem/2015필요한 로직 : Prefix Sum0. psum[i] = i번째까지의 누적...

2018번 수들의 합5 [내부링크]

https://www.acmicpc.net/problem/2018소스코드필요한 로직 : 이분탐색 + prefix sum 아이디어0. prefix ...

2143번 두 배열의 합 [내부링크]

https://www.acmicpc.net/problem/2143소스코드필요한 로직 : 부분합 + HashMap0. 연속 부분합이 아니...

2665번 미로만들기 [내부링크]

https://www.acmicpc.net/problem/2665소스코드필요한 로직 : 다익스트라0. 같은 문제https://blog.naver...

2661번 좋은수열 [내부링크]

https://www.acmicpc.net/problem/2661소스코드필요한 로직 : 백트래킹1. '1','2',&...

1038번 감소하는 수 [내부링크]

https://www.acmicpc.net/problem/1038소스코드필요한 로직 : Backtracking + 조합0. 어렵다. 4시간 동...

14890번 경사로 [내부링크]

https://www.acmicpc.net/problem/14890소스코드필요한 로직 : 완전탐색0. 리팩토링이 필요한 코드다. 행...

이분탐색(lower/upper bound) 개념 [내부링크]

이분탐색 시, 혼동되는 부분이 있어 정리해보려 한다.(1) 동일값 처리(2) 존재하지 않는 값 처리 Lower ...

14003번 가장 긴 증가하는 부분 수열 5 [내부링크]

https://www.acmicpc.net/problem/14003소스코드필요한 로직 : LIS + Tracing0. 아래 문제는 LIS...

17140번 이차원 배열과 연산 [내부링크]

https://www.acmicpc.net/problem/17140소스코드필요한 로직 : 완전탐색1. MAIN (R연산 기준)(1) 현...

2467번 용액 [내부링크]

https://www.acmicpc.net/problem/2467소스코드필요한 로직 : 투포인터1. MAIN(1) s, e 포인터 의미s...

11779 최소비용 구하기 2 [내부링크]

https://www.acmicpc.net/problem/11779소스코드필요한 로직 : 다익스트라 + tracing0. 오늘 푼 문제에서...

17136번 색종이 붙이기 [내부링크]

https://www.acmicpc.net/problem/17136소스코드필요한 로직 : 백트래킹0. promising 하지 않은 노드를 ...

immutable, mutable 중요한 이유 [내부링크]

* 아래 문제를 통해 immutable,mutable 자료형을 구분하지 않으면 생기는 오류에 대해 알아보려 한다.htt...

15665번 N과 M(11) [내부링크]

https://www.acmicpc.net/problem/15665소스코드이 문제는 DFS보다 파이썬의 자료형을 제대로 사용할 ...

2230번 수 고르기 [내부링크]

https://www.acmicpc.net/problem/2230소스코드필요한 로직 : 투포인터1. 두 포인터의 역할diff = ...

1439번 뒤집기 [내부링크]

https://www.acmicpc.net/problem/1439소스코드필요한 로직 : 그리디0. 변하는 순간이 언제인지만 체크하...

Level4 (kakao)무지의 먹방 라이브 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42891소스코드필요한 로직 : 그리디(우선순위큐)1....

18405번 경쟁적 전염 [내부링크]

https://www.acmicpc.net/problem/18405소스코드필요한 로직 : BFS0. 작업에 필요한 우선순위를 구한 ...

18428번 감시 피하기 [내부링크]

https://www.acmicpc.net/problem/18428소스코드필요한 로직 : 백트래킹0. NQUEEN 유형의 문제들...

Level3 (kakao)블록 이동하기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60063소스코드필요한 로직 : BFS0. 최단거리로 ...

Level2 (kakao) 실패율 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42889#소스코드필요한 로직 : 해시맵 + 정렬0. 파...

1715번 카드 정렬하기 [내부링크]

https://www.acmicpc.net/problem/1715소스코드필요한 로직 : 우선순위큐요구사항과 해결1. 두 카드묶...

Level4 (kakao) 가사 검색 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60060소스코드 (이진탐색 직접 구현)소스코드 (bisec...

1202번 보석도둑 [내부링크]

https://www.acmicpc.net/problem/1202소스코드필요한 로직 : 그리디(우선순위큐 활용)요구사항과 해결 ...

17471번 게리멘더링 [내부링크]

https://www.acmicpc.net/status?user_id=ebbunnim&problem_id=17471&from_mine&#x3D...

2458번 키 순서 [내부링크]

https://www.acmicpc.net/problem/2458소스코드필요한 로직 : 플루이드 와샬0. 처음에는, 위상정렬로 ...

Level4 징검다리 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/43236소스코드필요한 로직 : 이분탐색0. lower bou...

Level2 큰 수 만들기 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42883소스코드필요한 로직 : 그리디(투포인터 활용)...

Level2 구명보트 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42885소스코드필요한 로직 : 그리디(덱 활용)* 아...

Level2 더 맵게 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42626소스코드필요한 로직 : 우선순위큐* 힙 자료...

Level3 디스크 컨트롤러 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42627소스코드필요한 로직 : 우선순위큐 + SJF(sh...

Level2 주식 가격 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/42584소스코드필요한 로직 : 스택요구사항과 해결...

Level3 (kakao)보석 쇼핑 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67258소스코드필요한 로직 : 투 포인터 (1) 구간 ...

Level2 (kakao) 수식 최대화 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/67257소스코드필요한 로직 : 스택 + 큐세 종류의 ...

Level2 (kakao)문자열 압축(리팩토링) [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/60057소스코드1소스코드2필요한 로직 : 문자열 처리 ...

42. Trapping Rain Water [내부링크]

https://leetcode.com/problems/trapping-rain-water/필요한 로직 : 스택스택문제에서는 변곡점(Inflect...

15. 3Sum [내부링크]

https://leetcode.com/problems/3sum/필요한 로직 : 투포인터 응용두 수를 더해서 합이 0이 되는 것은? ...

121. Best Time to Buy and Sell Stock [내부링크]

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/필요한 로직 : 카데인 알고리즘 기초대...

21. Merge Two Sorted Lists [내부링크]

https://leetcode.com/problems/merge-two-sorted-lists/필요한 로직 : Linked List[배경지식]연결리스...

316. Remove Duplicate Letters [내부링크]

https://leetcode.com/problems/remove-duplicate-letters/필요한 로직 : 스택[논리]*스택에 append : 중...

739. Daily Temperatures [내부링크]

https://leetcode.com/problems/daily-temperatures/필요한 로직 : 스택[논리]stack에 삽입하는 것을 기...

23. Merge k Sorted Lists [내부링크]

https://leetcode.com/problems/merge-k-sorted-lists/필요한 로직 : Linked list + Min-heap[배경지식...

3. Longest Substring Without Repeating Characters [내부링크]

https://leetcode.com/problems/longest-substring-without-repeating-characters/(solution1)(solution2)...

파이썬 pack, unpack [내부링크]

파이썬의 '아스테리스크'라고 불리우는 *의 역할을 설명하기 위해 패킹, 언패킹 개념에 관해 알...

9372번 상근이의 여행 [내부링크]

https://www.acmicpc.net/problem/9372필요한 로직 : 없음입력만 정상적으로 받고 N-1만 출력하면 끝나는 당황스러운 문제다. 이 문제는 최소 스패닝 트리를 묻는 문제가 아니기 때문이다. 그래프를 구성하는 스패닝 트리는 아래 예시처럼 다양하게 있을 수 있다. 그 중 가장 적은 비용으로 스패닝 트리를 구성하는 알고리즘이 bfs, 크루스칼, 프림 알고리즘인데 이 문제의 경우 가중치가 모두 같고 연결 그래프 내에서 정점을 여러번 방문해도 되며 단순히 모든 정점을 순회할 수 있는 간선수만 출력하면 된다. 그렇다면 정점 V개를 이을 V-1개의 간선을 출력하면 끝난다. 필요한 로직 "없음"!가중치 1로 두고 굳이 bfs를 쓰고 싶.......

5052번 전화번호 목록 [내부링크]

https://www.acmicpc.net/problem/5052필요한 로직 : 트라이[논리]일관성 체크로 트라이 자료구조를 활용한다. Trie 클래스 생성시 루트 노드를 TrieNode 클래스를 갖게 되며, 루트에서 자식노드로 점점 깊어지며 단어 내 문자 단위로 트리를 구성하게 된다. 문자 단위로 trie에 insert할 때 단어가 완성된 시점들에는 일종의 flag로 해당 노드의 word 속성을 True로 세팅한다. 그래서 이 문제를 풀때, 문자 단위로 트라이 순회를 하다가 만약에 중간에 word 속성이 True인 노드가 발견되면 일관성이 없다고 바로 반환하는 로직을 사용했다. * 이전에 풀이한 다른 방식도 있다. https://blog.naver.com/sjy263942/222043350005

19237번 어른상어 [내부링크]

https://www.acmicpc.net/problem/19237필요한 로직 : 시뮬레이션[배경]모든 과정을 직접 구현해야 해서 힘든 문제였다. 특히 모든 상어들의 움직임을 "동시"에 진행하되, 상어간 우선순위를 적용하는 장치를 설정하는 것에 시간을 쏟았다. 이 문제에서는 작은 번호의 상어가 우선 순위를 가진다. 같은 공간에서 여러 상어들이 마주친다면 작은 번호의 상어가 우선권을 가지고 해당 위치에 자리하게 됨을 의미한다. 그런데, 만약 x번의 상어들을 아무렇게나 움직이면 (3->2->4->1 등) 우선순위에 대한 논리가 깨져버린다. 즉, 1번 상어부터 오름차순번으로 상어들을 움직이게 만들어야 현재 x번 상어가 움직여 위치한 곳.......

1167번 트리의 지름 [내부링크]

https://www.acmicpc.net/problem/1167필요한 로직 : BFS[배경]트리의 지름은 임의의 두 노드 중 가장 거리가 긴 경로를 의미한다. 이 사이트에 풀이된 증명과정을 참고하면, 1. 임의의 노드(A) 하나를 잡고2. 현재 노드(A)에서 가장 거리가 먼 노드(B)를 선택 3. (B)노드에서 가장 거리가 먼 노드(C)를 선택하면 B~C의 거리가 트리의 지름이 된다. 그림으로 그려보면 직관적으로 이해할 수 있다. 지름을 구성하는 1번, 5번 노드를 양손으로 잡고 트리를 팽팽하게 늘려본다고 생각해보면, 아래 노란색 경로가 나온다. 즉, 이렇게 직렬적으로 구성된 경로에서 임의의 노드A에서 5 또는 1까지의 거리 중 어떤 노드(B)를 현재 더 길다고 선택해.......

Level3 (kakao)추석 트래픽 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17676필요한 로직 : 문자열 처리 + 슬라이딩 윈도우(덱)[배경]슬라이딩 윈도우가 생각나긴 했지만, 윈도우 시작점을 어디로 잡아야 할까? 고민이 있었다. 1msec 단위씩 윈도우 시작점을 옮기기에는 msec 단위만 해도 24*60*60*1000번 이상의 경우의 수가 고려되므로 불가능한 시작점이다. 그래서, 로그의 시작 시간과 종료 시간을 기준으로 시작점을 찾기로 했다. 단, 종료 시간을 기준으로 슬라이딩 윈도우를 잡을 경우, 당시에는 한 프로세스로 카운팅되지만 다음 윈도우부터는 process로 카운팅되지 말아야 한다. (==윈도우의 범위를 벗어났다를 체크). 이런 로직을 반영할 수.......

19236번 청소년 상어 [내부링크]

https://www.acmicpc.net/problem/19236필요한 로직 : 시뮬레이션(DFS)[배경 - 문제 정리][논리]0. arr현재 arr 각 원소는 (물고기 번호, 물고기 방향)으로 되어있다. 만약에 shark가 물고기를 먹었다면 shark_eat에 물고기 번호를 더해주고 arr[x][y][0]를 -1 로 바꿀 것이다. 1. dfs핵심은 상어가 현재 위치에서 무엇을 하며, 어디로 움직일 것인가를 추적하는 것이다. 따라서 DFS 함수 내부에서 (1) 현재 상어 위치에서 상어가 물고기를 먹어 변화된 상황을 체크하고 (2) 물고기들이 움직이는 과정을 구현한다. (3) 이후 현재 위치를 기반으로 상어가 앞으로 갈 movelist를 확정했다면, 그 리스트를 기반으로 상어들은 재귀적으로 다음 번.......

Level2 (kakao)프렌즈4블록 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17679필요한 로직 : 구현[논리]1. board를 full scan하며 2*2 프렌즈 행렬을 터뜨릴 수 있는 starter들을 모은다. (bomb_list) 2. board를 모두 순회했다면, 동일 원소 행렬을 모두 터뜨려 빈 공간으로 대체한다. ('.'로 교체)3. 행을 우선 순회하며, '.'로 비어있는 공간을 확인하는 순간, 그보다 윗행에 프렌즈 블록 존재시(!='.') 비어있는 공간으로 떨어뜨린다. 이후 탈출한다. (탈출하지 않으면 스왑 과정이 계속 일어날 수 있으니 주의)4. 1~3 과정을 터뜨릴 블록이 있는 한 반복하고, 최종 board의 비어 있는 공간을 카운팅한다.

Level2 (kakao)뉴스 클러스터링 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17677필요한 로직 : 문자열 처리[논리]1. 데이터 전처리(1) 슬라이싱 : 두 글자씩 끊어서 다중 집합을 만드는 과정(2) 문자 원소 제한 : 정규화식에 부합하는 원소만 남김(3) 카운터 객체 생성 : intersection과 union 원소 개수를 구해야 하기 때문에, 각 원소가 몇번씩 등장하느냐를 미리 카운트한다.2. intersection, union 처리 (본문의 RULE에 따름에 주의 - 특히 중복 처리)union은 intersection에서 출발한다. c1, c2 두 집합 모두에 존재하면 intersection 집합에 넣어준다. union은 intersection 정보에 c1,c2 에만 존재한 원소 정보까지 덧붙일 것이다.교집합 개수 : (interse.......

Level1 (kakao)다트 게임 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17682필요한 로직 : 문자열 처리(정규화)[논리]1. 정규식을 통한 문자열 토큰화 작업이 필요하다. (1) 0~10까지의 숫자 표현 : 한 자리 이상의 숫자로 표현되므로 [0-9]+ (2) 알파벳 한 문자 (3)* 혹은 # 특수기호 옵션 (escape문으로 메타데이터가 아닌 일반 문자로 활용)2. 규칙을 통한 연산토큰화된 (초기 숫자,bonus 문자, 옵션) 을 통해 차례대로 연산하되 *옵션을 만나면 이전 score을 확인해 2배해야 하므로 크기 3인 ans 리스트로 연산값들을 저장 및 갱신한다.[참고]https://whatisthenext.tistory.com/116

Level2 (kakao)캐시 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17680Solution1Solution2필요한 로직 : 덱 자료구조 + LRU 알고리즘* Solution1 풀이 기준 [배경]이 문제는 두가지에 초점을 두고 해결하였다.- 캐시 hit or miss에 따른 시간 흐름- 캐시를 고정된 크기의 윈도우로 다루는 것. [논리]cache에서 넣을 city를 하나씩 순회한다.1-1. city가 현재 cache에 있다면?cache에 있는 city 원소를 지우고 새롭게 city를 삽입한다(LRU 알고리즘을 사용하므로 가장 최근에 쌓였음을 의미하도록 덱의 가장 우측에 삽입한다). 이때 cache 내부에서 인덱스만 갱신되므로 cacheSize 확인은 필요없다.1-2. city가 현재 cache에 없다면?마찬가지로 city를 삽.......

Level3 (kakao)셔틀버스 *리팩토링* [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17678필요한 로직 : 덱 + 스케줄링[배경]<디스크 컨트롤러>가 떠오르는 문제였다. 큐나 덱은 보통 대기 + 시뮬레이션 문제에서 빈번하게 등장한다. <셔틀버스> 문제도 제한 시간과 인원 속에서 셔틀 버스에 태울 수 있는 사람을 순차적으로 처리하는 문제이기에, 같은 로직으로 해결 가능하다. 즉, "대기 큐의 상태관리, 시간의 흐름"을 중심으로 풀면 된다.https://blog.naver.com/sjy263942/222122566554[논리]0. 분 단위로 모든 크루의 탑승 시간을 변환한 뒤, 오름차순 정렬해 빨리 온 크루부터 버스에 태울 것이다. 1. 한 버스에 최대 m명의 크루를 태운다.버.......

Level1 (kakao)비밀지도 [내부링크]

https://programmers.co.kr/learn/courses/30/lessons/17681필요한 로직 : 비트 연산 OR[논리]암호화된 배열은 벽:1,공백:0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. 1. 지도1 또는 2에서 벽이면 벽이다 => 하나라도 1이면 1이다2. 지도1과 2 모두 공백이면 공백이다 => 모두 0이면 0이다.이 두가지 힌트를 통해서 OR 비트 연산을 활용했고, n 비트 표현을 위해(자리수 고정) zfill(n)을 활용했다.

783. Minimum Distance Between BST Nodes [내부링크]

https://leetcode.com/problems/minimum-distance-between-bst-nodes/필요한 로직 : 이분 탐색 트리 + 중위 순회[논리]이진 탐색 트리를 중위 순회하고 (현재 노드 값 - 이전 노드의 값)의 최솟값을 구하는 문제다. 중위 순회를 하는 이유는 아래 그림과 같이 BST를 sorted List로 바꿔보면 알 수 있다. [주의]만약 prev라는 이전 노드의 값을 저장하는 변수를 0으로 초기화하면 null을 자식 노드로 갖는 leaf 노드에서는 현 노드의 값이 그대로 나와버린다.(현노드 - 0) 따라서 prev를 -1e9라는 최소값으로 잡고 차이를 구해야 null로 인한 오류를 막을 수 있다.

105. Construct Binary Tree from Preorder and Inorder Traversal [내부링크]

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/필요한 로직 : 분할 정복 + 이진 트리 [배경]트리 순회 중 전위, 중위, 후위 순회 중 두가지 결과만 알아도 이진 트리를 복원할 수 있다. 전위 순회 결과를 보면 [r1,r2,r3...] 원소 순으로 서브 트리의 root를 구성한다. 따라서 트리를 구성하는 root를 계속 잡아가는데 전위 순회 결과를 사용하여 분할 정복의 기준으로 삼을 것이다. 이렇게 되면 중위, 후위 순회 결과 어떤 것이 나와도 재귀 순회 순서만 바꿔주면 될 것이다. 위 풀이에서는 전위순회 + 중위순회 기준으로 이진트리를 복원하였다.[논리]1. preorder의 0번째 원소를 계속 추출하며.......

[CI/CD]Docker Compose(docker in docker) + jenkins [내부링크]

들어가기 전이 포스팅은 ec2 서버를 사용하지 않고 로컬에서 진행한 내용을 담았다. ec2 free-tier 에서 docker in docker + docker compose 방식으로 컨테이너들을 구동하려다가 실패했기 때문이다. 다른 사람들도 나와 같은 경우가 있어서 찾아봤더니 메모리 문제라고 한다. 메모리 문제만 아니면 아래 기재할 내용들을 ec2 서버 상에서 그대로 수행해도 문제 없을 것이다. 그리고 보통 ec2가 아닌 ecr을 사용하는 것 같으니 그 방법으로도 다음에 해봐야겠다. 사용할 프로젝트는 REST API 형태로 프론트와 백이 통신하는 완전히 분리된 구조를 가지고 있다. 토이 프로젝트라 기존에 사용하던 nginx 캐시 기능, 로드밸런싱 기능이 필요없으니.......

108. Convert Sorted Array to Binary Search Tree [내부링크]

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/필요한 로직 : 이분 탐색 트리(BST)[배경지식]이진 트리가 단순히 모든 노드가 둘 이하의 자식을 갖는 트리 형태라면(정,완전,포화 이진트리), 이진 탐색 트리는 이진 트리이되 정렬된 트리를 의미한다. 노드의 왼쪽 서브트리에는 현 노드보다 작은 값들로 노드를 구성하고 오른쪽 서브트리에는 현 노드값과 같거나 큰 값을 가진 노드들로 이루어진 트리를 뜻한다. 이분 탐색을 떠올리면 쉬운데, target 값을 찾기 위해 x>target 이면 right pointer를 조정하고 x<target이면 left pointer를 조정하듯이 노드의 값에 따라 왼쪽이나 오른쪽 서브트리를 선택.......

1038. Binary Search Tree to Greater Sum Tree [내부링크]

https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/필요한 로직 : 이진 탐색 트리 + 중위 순회[논리]예제 그래프를 보면, 가장 오른쪽 리프 노드부터 시작해서 오른쪽-부모-왼쪽 순으로 누적 합계를 계산하고 있다. 따라서 TreeNode를 중위 순회하면 되는 문제이고, (1) global한 누적합 (2) root의 현재 노드를 누적합으로 재할당 만 하면 된다. 새로운 트리 노드를 굳이 구성하지 않고 재할당으로 해결했다.

938. Range Sum of BST [내부링크]

https://leetcode.com/problems/range-sum-of-bst/필요한 로직 : 이진 탐색 트리[논리]단순히 트리 순회로 끝나는 문제지만 이진 탐색 트리의 정렬된 특성을 이용해서 가지치기를 해볼 수 있는 문제다. 현재 노드의 val이 high 제약보다 더 크다면, 현 노드보다 큰 값이 들어있는 오른쪽 자식 노드들은 순회할 필요가 없다. 이때는 가지치기로 현재 노드의 left로 순회를 이어갈 것을 선언하면 된다. 마찬가지로 low 제약보다 작다면 왼쪽 순회를 가지치기하고 right 노드에 걸려있는 서브 트리들만 순회하면 된다.

2098번 외판원 순회 [내부링크]

https://www.acmicpc.net/status?user_id=ebbunnim&problem_id=2098&from_mine=1필요한 로직 : DP+비트마스킹[배경]언제 한번 TSP를 풀어봐야지.. 미루다가 오늘에서야 푼다. DFS 순회를 연상하며 비트마스킹을 활용하고, 왜 DP를 써야하는가 물으며 해결했다. 라이님 블로그, SUNGHWAN PARK님 블로그 등등 여러 블로그들을 참고했다.[논리]1. 왜 DP가 필요한가?피보나치 수열을 떠올리면 답이 나온다. 핵심은 "중복된 과정"을 재연산하지 않는다는 점이다. 예를 들어 메모이제이션을 활용하지 않고 재귀로 모든 과정 구현하게 되면, Fibo(N)을 풀기 위해서 다항 시간이 아닌 지수시간(2^N)대가 소요된다. .......

110. Balanced Binary Tree [내부링크]

https://leetcode.com/problems/balanced-binary-tree/Solution1Solution2필요한 로직 : 이진트리 순회[배경]Height-Balanced(높이 균형)은 모든 노드의 서브 트리 간 높이 차가 1이하인 것을 말한다. 균형이 맞는 트리를 구성해야 효율적인 탐색이 가능해진다. 균형이 맞다는 것은 통상 높이를 가능한 한 낮게 유지함을 의미하고, 효율적 탐색이 가능한 이유는 편향 BST vs 균형 BST를 떠올려보면 된다.* 참고https://jackpot53.tistory.com/17[논리]재귀로 트리를 순회하되 트리의 리프노드를 만나면 리프노드의 left, right 노드를 0으로 설정해 재귀를 종료하도록 하였고, 리프노드에 높이 1이 저장된다. 이후 재귀 반환구조를 통해 현재.......

[2020 마이블로그 리포트] 한 눈에 보는 올해 내 블로그 데이터! [내부링크]

#세상부지런하고 #궁금한 #전교회장 #마이 블로그리포트 #2020 #연말 #아쉬움

310. Minimum Height Trees [내부링크]

https://leetcode.com/problems/minimum-height-trees/필요한 로직 : 그래프[배경]이 문제는 그래프, 트리, 스택, 덱과 같은 다양한 자료구조를 활용해 푼 문제라 재미있었다. 최소 높이 트리를 구성하라는 것은 그래프에서 시작 노드를 설정하고 리프노드까지의 최대 높이가 무엇인지 살피고, 시작 노드를 변경해보며 최대 높이들 중 가장 작은 높이를 출력하라는 것이다. 말로 풀어 어렵지만, 결국 원하는 바는 "그래프 한 가운데 있는 노드"를 시작 노드로 설정해야 최소 높이로 트리를 구성할 수 있다는 것이다. 따라서 리프 노드들을 하나씩 제거하며 루트 노드가 1개 혹은 2개가 남았다면 출력하면 된다. 루트 노드는 아래.......

[D3]1244번 최대상금 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15Khn6AN0CFAYD필요한 로직 : DFS쉽게 풀릴 줄 알았는데, 신경쓸게 많은 문제였다. 이 문제는 완전탐색으로 가장 큰 값을 찾는 문제가 아니다. 가장 큰 수가 나와도 바꿔야 하는 횟수를 다 채우지 못하면, 더 작은 수로라도 바꿔야 한다. 예를 들어 '4','9'에서 바꿀 횟수가 2로 주어지면 '9','4'를 포기하고 다시 '4','9'로 되돌려 놔야 한다. 이 지점을 힌트로 삼아 (1) 현재 수보다 크거나 같은 수가 나오면 두 수를 swap하며 가장 큰 수를 만들어놓고 (2) 바꿀 횟수가 남았다면 가장.......

[D2]1954번 달팽이 숫자 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE필요한 로직 : 구현[논리]방향 설정이 중요한 문제다. 우측 방향으로 배열을 탐색하고 숫자를 할당하다가, index 범위 밖으로 나가거나 이미 방문한 지점을 만날 경우에는(0이 아닌 수 삽입된 경우) 방향을 선회한다. 우->하->좌->상-> 다시 우... 이렇게 계속 방향 선회가 반복된다. arr에 넣을 수 중 최대값인 N*N까지 넣게 되면 모든 arr를 숫자로 채웠음을 의미한다. 그때는 탐색을 종료하고 답을 출력한다.

[D4]2819번 격자판의 숫자 이어 붙이기 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB&categoryId=AV7I5fgqEogDFAXB&categoryType=CODE필요한 로직 : DFS4*4 배열이 고정되어 있어 완전탐색으로 풀면 되는 문제다. 중복된 위치를 다시 순회할 수 있다는 것 빼고는 단순히 구현하면 된다.

[모의SW역량테스트]2383번 점심 식사시간 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5-BEE6AK0DFAVl필요한 로직 : 시뮬레이션(dfs + 작업스케줄링)[배경]처음 접근한 방식은 사람들이 가까운 계단 중 하나로 이동한 거리를 구하고, 거기서 도착 시간을 고려해 계단 위에 최대 3명의 사람을 올리고 마지막 사람이 나왔을 때의 시간을 계산한다는 방식이었다. 그러나 계단을 내려가는 시간이 몇분동안 지속되는지, 그리고 대기해야 하는 사람들이 얼마나 몰려있느냐에 따라서 최종 소요시간이 달라진다. 따라서 사람들을 가장 가까운 계단으로 배치하는 것이 아니라 계단1, 계단2로 내려가도록 두 집단으로 나누어 완전탐색을 해야 한다. 따.......

617. Merge Two Binary Trees [내부링크]

https://leetcode.com/problems/merge-two-binary-trees/필요한 로직 : 재귀t3라는 새로운 이진트리를 t1,t2 (:TreeNode) 병합으로 구성하면 된다. t1, t2 모두 존재한다면 "현재 만드는 트리의 현재값을 TreeNode(t1.val+t2.val)로 저장 -> left, right 노드들을 재귀 탐색 => 구성된 트리를 최종 저장한뒤 상위노드로 리턴되도록 return t3" 를 선언한다. 반면 t1이나 t2 구성 노드가 더 이상 존재하지 않는다면 t1 or t2 or None으로 하위 트리를 구성하며 재귀를 종료하고 상위노드로 리턴하게 된다. [도식화]

백엔드 개발에 필요한 지식(1) [내부링크]

참고사이트 https://d2.naver.com/news/3435170백엔드 개발자 = 시스템을 안정적이고 효율적으로 만...

토픽 모델링 알고리즘 LDA [내부링크]

LDA말뭉치(corpus)로부터 토픽을 추출하는 토픽모델링(Topic Modeling) 기법 중 하나* gensim 라이브...

서버와 스토리지, 데이터베이스 시스템 [내부링크]

* 혼동되는 개념들이 있어서 정리해보고자 한다.서버, 스토리지 서버(Server)가 데이터가 한 곳에 모이...

AWS EC2 + Docker + Spring boot 배포 [내부링크]

기본 준비- EC2 서비스 내 인스턴스 생성 + 각자 사용할 포트에 대해서 인바운드 규칙에 명시- 프로...

AWS와 클라우드 컴퓨팅 [내부링크]

AWSAmazon Web Services는 아마존(Amazon)에서 제공하는 클라우드 컴퓨팅 서비스로 가상 컴퓨터와 ...

RDS로 데이터베이스 복원 [내부링크]

* 데이터베이스 백업, 복원은 습관화해야 하며 기본적인 작업이기 때문에 간단히 포스팅한다.RDS 서비...

EC2+Tomcat+SpringBoot War 배포 [내부링크]

* 한번은 블로그에 포스팅 해야지 생각하다가 AWS 시리즈를 정리하기로 한 김에 이제야 한다. 예전에는 ...

EC2 + nginx + Vue [내부링크]

1. nginx 설치2. dist폴더로 빌드이후 원격서버로 이동. 앞선 포스팅에서 임의로 넣은 폴더 경로 원래는 아...

[D2]1859번 백만 장자 프로젝트 [내부링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE#none필요한 로직 : 구현최대 가격을 뒤에서부터 교체하면서 매 순간 차익을 더해주는 식이다. 만약 뒤에서부터 순회하지 않고 정방향으로 순회한다면 조금 복잡해진다. 3->5->9 와 같은 가격 변화가 있을때 3->5 로 당장 2의 차익을 실현해도, 9가 등장하는 순간 9-3-2, 9-5 와 같이 9보다 작은 모든 수에 대해서 다시 한번 연산이 들어가야 한다. 따라서, 이 방법보다는 끝에서부터 현재 시점에서 가장 높은 가격을 계속 hold하고 매번 차익을 실현하되, max.......

347. Top K Frequent Elements [내부링크]

https://leetcode.com/problems/top-k-frequent-elements/solution1solution2필요한 로직 : Dictionary (+heap)solution2 방식으로는 Counter객체로 원소의 빈도수를 구하고 최대힙 자료구조 활용으로 k번 추출하면 된다. 반면 counter.most_common(k)와 zip/* 활용으로 pythonic하게 풀이할 수도 있는게 solution1이다.https://blog.naver.com/sjy263942/222165819714

332. Reconstruct Itinerary [내부링크]

https://leetcode.com/problems/reconstruct-itinerary/submissions/(Solution1)(Solution2)필요한 로직 : dfsSolution1을 기준으로 설명한다.[배경지식]재귀의 반환 구조가 돋보이는 문제다. 재귀로 함수를 계속 호출하다가, return되는 시점에서 만들어 놓은 값들을 다시 타고 올라온다. 이 문제에 대입해보면, 여행 경로를 path라는 리스트에 저장할 때 처음 방문한 여행지가 path에 가장 마지막에 삽입되기(스택 연상-LIFO) 때문에 여행 경로를 정상 출력하려면 리스트를 뒤집어야 한다.[EXAMPLE][흐름](1) JFK -> KUL : 이후 갈 수 있는 여행지 없다. 그러나 한번에 순회하지 못하는 경우는 주어지지 않으므로 현재 순회에서 끊.......

207. Course Schedule [내부링크]

https://leetcode.com/problems/course-schedule/필요한 로직 : DFS[배경]그래프의 사이클 존재 여부를 DFS로 판별한다. 처음 든 생각은 "set에 지나온 노드들의 정보를 넣고 중복이 발생한 순간 dfs에서 상위로 False를 계속 반환하게 만들자"는 생각이었다. 그러나 아래 그림 중 cycle x 그래프 처럼, 만약에 0이라는 parent 노드가 0->1->2까지 순환없는 탐색이 가능했다면, 다시 0 parent노드로 돌아와 또 다른 자식노드인 2번 노드로 가게 된다. 이때 2번 노드는 이미 set에 들어있어 사이클이 존재한다고 판명되어 버린다. 이 문제를 해소하기 위해 부모 노드에서 리프노드까지 모든 순회를 무사히 마쳤다면, 지나온 자.......

787. Cheapest Flights Within K Stops [내부링크]

https://leetcode.com/problems/cheapest-flights-within-k-stops/필요한 로직 : 다익스트라[논리]다익스트라 기본 구현과 함께 힙에 지나온 경유지의 개수까지 관리해주면 된다. K개 초과한 경유지를 거쳐야 한다면, 해당 순회를 멈춘다.