본문 바로가기

분류 전체보기

(178)
[정렬] 프로그래머스 level 2 H-Index python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 문제 접근 citations 각 요소들을 비교하면서 인용 횟수를 세야하나..? 그럼 이중 for문을 써야 하나..? 그래도 뭔가 이상한데.. 다시 문제 접근 1. 가장 인용횟수가 높은 논문 인덱스부터 정렬한 후 2. 0회 인용 횟수부터 시작해서 논문 하나씩 비교해 나가면서 +1 하다가 3. 인용 횟수보다 더 낮은 인용 횟수의 논문이 나오면 break 이런 식으로 간단히 풀 수 있었다.. 코드..
[개발일기] 이 코드에서 Semaphore 사용하는 이유가 무엇인가요? Semaphore? 세마포어(Semaphore)는 컴퓨터 시스템 내에서 다수의 프로세스 간의 활동을 조정하기 위해 사용되는 일반적인 변수입니다. 세마포어는 상호 배제(Mutual Exclusion)를 강제하고 경쟁 조건(Race Condition)을 피하며 프로세스 간 동기화를 구현하는 데 사용됩니다. 세마포어를 사용하는 과정에는 "wait"와 "signal" 두 가지 연산이 포함됩니다. wait 연산은 세마포어의 값을 감소시키며, signal 연산은 세마포어의 값을 증가시킵니다. 세마포어의 값이 0인 경우, wait 연산을 수행하는 프로세스는 다른 프로세스가 signal 연산을 수행할 때까지 블록됩니다. 세마포어는 임계 영역(Critical Section)을 구현하는 데 사용되며, 이는 코드의 일부를 ..
[SOLID] DIP: The Dependency-Inversion Principle * 이 글은Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. DIP: The Dependency-Inversion Principle a. High-level modules should not depend on low-level modules. Both should depend on abstractions. b. Abstractions should not depend on details. Details should depend on abstractions. 고수준 모듈이 저수준 모듈에 의존하는 경우 이러한 고수준 모듈을 다른 맥락에서 재사용하기가 매우 어려워집니다. 그러..
[SOLID] ISP: The Interface-Segregation Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. The Interface-Segregation Principle 이 원칙은 "두꺼운(fat)" 인터페이스의 단점에 대처하기 위한 원칙입니다. "두꺼운" 인터페이스를 가진 클래스란, 인터페이스가 그 인터페이스를 구현한 클래스와 연관성이 없는 클래스를 말합니다. ISP는 연관성이 없는 인터페이스가 필요한 객체가 있음을 인정하지만, 이러한 객체들에 대한 클라이언트가 하나의 클래스로 이해하면 안된다고 말합니다. 대신 클라이언트는 연관성 있는 인터페이스를 갖는 추상 기본 클래스를 알아야 합니다. Interface P..
[SOLID] LSP: The Liskov Substitution Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. LSP: The Liskov Substitution Principle OCP(개방-폐쇄 원칙)의 주요 메커니즘은 추상화(abstraction)와 다형성(polymorphism)입니다. C++ 및 Java와 같은 정적으로 형식화된 언어에서는 이러한 추상화와 다형성을 지원하는 주요 메커니즘 중 하나가 상속(inheritance)입니다. 상속을 사용함으로써 우리는 기본 클래스의 추상 메서드를 구현하는 파생 클래스를 생성할 수 있습니다. 이러한 상속 사용의 특정한 디자인 규칙과 최상의 상속 계층 구조의 특성을 다루..
[SOLID] OCP: The Open–Closed Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. OCP: The Open–Closed Principle Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification. 프로그램의 단일 변경으로 인해 종속 모듈에 대한 연쇄적인 변경이 발생하는 경우, 해당 디자인은 경직(Rigidity)의 흔적, 즉 코드의 수정이 어려워지는 경향이 있습니다. OCP(개방-폐쇄 원칙)는 프로그램이 추가 변경 사항이 발생하더라도, 연쇄적인 변..
[SOLID] SRP: The Single-Responsibility Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. SRP: The Single-Responsibility Principle 왜 책임을 별도의 클래스로 분리하는 것이 중요한가요? 각 책임은 변경의 축이기 때문입니다. 요구 사항이 변경되면 그 변경은 클래스 간의 책임 변경을 통해 나타날 것입니다. 하나의 클래스가 두 개 이상의 책임을 가정하면 해당 클래스가 변경해야 하는 이유가 두 개 이상 발생할 것입니다. 하나의 클래스가 두 개 이상의 책임을 갖는 경우, 이러한 책임들은 서로 결합됩니다. 이때 한 책임에 대한 변경 사항은 클래스가 다른 책임을 충족하는 능력을..
[Tip] Orbstack, docker-desktop를 대체하는 가볍고 빠른 가상 머신 실행 소프트웨어 OrbStack is the fast, light, and easy way to run Docker containers and Linux machines on macOS. It's a supercharged WSL and Docker Desktop alternative, all in one easy-to-use app. OrbStack? OrbStack은 macOS에서 Docker container와 Linux machines를 실행할 수 있는 소프트웨어입니다. Docker Desktop, Colima와 같은 가상 머신 실행 소프트웨어와 유사합니다. OrbStack은 시스템 자원을 효율적으로 사용하는 것을 핵심 원칙으로 하고있습니다. OrbStack은 가벼우며 사용자가 사용하기 편하게 설계되었으며, 사용..