본문 바로가기

전체 글151

17. 테스트와 개발 방법론 完 TDD는 소프트웨어 개발 방법론 중 하나로, 개발자가 코드를 작성하기 전에 해당 코드의 테스트 케이스를 먼저 작성하게 한 후 해당 테스트를 통과할 수 있는 코드를 작성하는 방식으로 소프트웨어를 개발합니다. 여기서 파생한 개념으로 BDD가 있습니다. BDD는 소프트웨어 개발 과정에서 비즈니스 요구사항과 소프트웨어의 행동을 강조하는 개발 방법론입니다. 개발자는 비즈니스 의도를 명확하게 이해해야 하고, 스펙을 테스트 가능한 형태로 작성할 수 있어야 합니다. 개발팀과 비즈니스팀 간의 빈번한 의사소통 강조, 테스트 케이스 명세 시 Given-When-Then 같은 자연어로 구성된 시나리오를 사용하는 것을 권장합니다. TDD, BDD는 코드의 안정성과 유연성을 높여 소프트웨어의 품질을 향상할 수 있는 가장 현대적인.. 2024. 11. 20.
16장 테스트와 설계 테스트와 소프트웨어 설계는 긴밀한 상관관계를 맺습니다. 상호보완적이죠. 당연한 이유는 좋은 소프트웨어 설계와 테스트가 추구하는 목표가 일정 부분 같기 때문입니다. 즉, 테스트가 추구하는 가치와 좋은 설계가 추구하는 가치에 일정 부분 교집합이 있는 것입니다. 좋은 설계는 시스템이 모듈로 분해되고, 각 모듈이 독립적으로 개발될 수 있게 하는 것을 추구합니다. 유연하게 확장될 수 있는 것을 추구하죠. 확장할 수 있는 시스템이란 다양한 기능을 제공할 수 있다는 의미도 있지만, 다양한 환경에도 이식할 수 있는 시스템이라는 뜻이기도 하죠.  16.1 테스트와 SRP, ISPUserService 컴포넌트의 login, Register 메서드를 분리하는 것이 맞을까요? SRP 관점에서 컴포넌트를 사용하려는 주체가 시스.. 2024. 11. 19.
15. 테스트 가능성 12장 '자동 테스트'에서는 테스트가 필요한 이유가 무엇인지 얘기했습니다. 테스트가 중요한 이유로 '회귀 버그 방지'였습니다. 하지만 실제로 테스트는 추가로 이점을 제공합니다. 예로, 테스트를 이용하면 전체 시스템의 품질을 향상할 수 있습니다. 테스트가 품질을 보증할 수 있어도, 품질을 개선해줄 수 없을 것 같다고 생각할 수 있죠. 테스트는 이미 만들어진 코드에 추가로 더 작성되는 요소이기 때문입니다. 테스트 자체는 수단에 불과합니다. 테스트를 '개발이 완료된 후 작성하는 것'이 아니라 '개발 전 미리 작성하는 것', '개발을 하면서 함께 작성하는 것'으로 보면 이야기가 달라지죠. 개발자는 어떻게 테스트를 작성하면 쉽게 작성할 수 있을지 고민함으로써 코드의 품질을 높일 수 있습니다. 테스트를 '좋은 설계.. 2024. 11. 18.
14. 테스트 대역 테스트 대역에서 말하는 대역은 대역폭 같은 것이 아닙니다. 말 그대로 영화에 나오는 스턴트맨, '대역' 그 자체를 의미하죠. 즉, 오롯이 테스트를 위해 만들어진 가짜 객체나 컴포넌트를 가리키는 용어입니다. 실제 객체를 대신해서 행동하고 실제 객체가 하지 못하는 일을 대신합니다. 예로 메서드를 호출한 결과로 제대로 된 상태 값이 반영됐는지만 확인하고 싶습니다. 테스트를 실행할 때마다 메일이 실제로 발송되지 않았으면 한다고 가정하죠. 이럴 때 테스트 대역을 사용할 수 있습니다. 메일을 발송하는 컴포넌트인 VerificationEmailSender 대역을 만들고 테스트할 때 UserService가 이를 사용하게 만든다고 생각해 봅시다. DummyVerificationEmailSender 컴포넌트가 대역처럼 동.. 2024. 11. 17.
[12-17 하] 12. 자동 테스트 & 13. 테스트 피라미드 소프트웨어 공학에서 말하는 테스트는 소프트웨어의 품질과 기능을 확인하고, 버그를 찾아내는 과정을 말합니다. 크게 2가지로 분류하는데, 수동 테스트와 자동 테스트가 있습니다. 수동 테스트는 테스트 담당자가 소프트웨어를 직접 실행해보고 각각의 기능을 평가하여 구현된 기능이 요구사항에 부합하는지 검증하는 과정을 말합니다. 사용자 관점에서 소프트웨어를 다양한 시나리오를 토대로 실행하여, 검증 과정에서 사용자 경험을 직접 평가할 수 있죠. 자동 테스트는 테스트 스크립트, 도구를 사용해 자동으로 테스트하는 과정을 말합니다.  12. 자동 테스트인수 테스트란 무엇일까요? 시스템이 비즈니스 요구사항을 만족해서 소유권을 넘기기 전에 수행하는 테스트 단계를 뜻합니다. 시스템을 인수하기 전에 시스템이 비즈니스 요구사항과 .. 2024. 11. 15.
10. 도메인 & 11. 알아두면 유용한 스프링 활용법 소프트웨어 공학에서 말하는 '도메인'은 애플리케이션이 해결하고자 하는 문제 영역을 의미합니다. 백엔드 개발자 입장에서 도메인은 어떻게 바라보는 것이 좋은지, 애플리케이션을 개발한다는 말이 왜 도메인을 개발한다는 말과 같은지, 애플리케이션의 본질은 스프링이나 JPA가 아니라 도메인이다라는 말이 왜 존재하는지 알아보죠. 10.1 소프트웨어 개발의 시작사업가 입장에서 소프트웨어 시스템을 만들게 되는 계기를 먼저 이해해보죠. 일반적으로 비즈니스는 '소프트웨어를 만들어야겠다'라는 전체로 시작되지 않기 때문이죠. 사용자가 겪는 문제를 해결하는 것이 비즈니스입니다. IT 사업가란 사람들이 겪는 문제를 분석, 솔루션 고안, 이를 소프트웨어로 구현하는 사람들이라고 볼 수 있습니다. 린(lean) : '군더더기 없는'이라.. 2024. 11. 13.
9. 모듈 9.1 모듈성모듈이란 무엇일까요? 소프트웨어 공학에서 모듈은 프로그램의 기본 구성 요소이면서 라이브러리를 포괄하는 조금 더 큰 규모의 용어입니다. 즉 모듈이란 라이브러리와 프로그램의 구성 요소 사이에 위치하는 개념입니다. 하지만 이는 좀 모호한데 더 구체적으로는 독립성과 은닉성을 만족하며 연관된 코드들의 묶음입니다.1) 독립성 : 모듈은 독립적이어야 한다.2) 은닉성 : 모듈의 사용자는 모듈의 내부 구현을 몰라도 된다. 공개된 인터페이스를 이용해 모듈과 통신한다. 이때 독립성과 은닉성 같은 특성을 모듈성이라고 부릅니다. 즉 연관된 코드 묶음은 모듈성을 만족할 때 모듈이 될 수 있습니다. 모듈 시스템이란 연관된 코드 묶음이 '모듈성'을 갖출 수 있게 도와주는 시스템적인 해결책입니다. 그래서 다음과 같은 기.. 2024. 11. 13.
7. 서비스 서비스의 역할은 크게 3가지 종류의 일을 해야 합니다.1) 도메인 객체를 불러옵니다.2) 도메인 객체나 도메인 서비스에 일을 위임합니다.3) 도메인 객체의 변경 사항을 저장합니다. 7.1 Manager스프링에서 서비스는 왜 서비스라고 부를까요? 컨트롤러는 '제어부', 리포지터리는 '저장소', 컴포넌트는 '구성 요소'입니다. 서비스는 '비즈니스 서비스를 처리하는 곳입니다'라는 답변은 충분한 답변이 되지 못합니다. @Service 애너테이션이 적힌 주석을 보면, 답이 나오죠.1) @Service는 에릭 에반스의 DDD에서 영감을 받아 만들어진 애너테이션입니다.2) 서비스는 J2EE 패턴 중 하나인 비즈니스 서비스 파사드처럼 사용될 수 있다. 스프링 서비스는 DDD에서 파생된 개념이라고 합니다. 이제 DDD를.. 2024. 11. 12.
8. 레이어드 아키텍처 8.1 레이어드 아키텍처의 최소 조건레이어드 아키텍처는 애플리케이션을 레이어로 나누고, 각 레이어에 역할을 정합니다. 꼭 유념해야 할 사실이 하나 있는데, 여러 개발자의 필요에 의해 발전된 아키텍처입니다. 레이어드 아키텍처에서 중요한 것은 레이어 유형을 외우고, 그에 맞게 컴포넌트를 배치 하는 것이 아니라 아래와 같은 사항을 지키는 것이죠.1) 레이어 구조를 사용한다.2) 레이어 간 의존 방향은 단방향으로 유지한다.3) 레이어 간 통신은 인접한 레이어에서만 이뤄지게 한다. 위 2), 3) 같은 제약 즉, 레이어 '구조'에 제약을 더했더니 '아키텍처'가 됐다는 의미입니다. 그래서 '아키텍처'가 뭘까요? 명확한 답은 없지만 아키텍트들이 아키텍처를 설명할 때 공통으로 말하는 내용을 취합해 아키텍처란 무엇인지를.. 2024. 11. 10.
[6-11 중] 6. 안티패턴 Spring framework는 자바 기반의 오픈 소스 애플리케이션 프레임워크로서 J2EE 환경에서 시스템 개발을 쉽게 하고 유지보수성을 높이기 위해 개발됐죠. 스프링 이전에 사용하던 J2EE의 EJB는 엔터프라이즈 환경에서 안정성과 확장성을 제공하는 훌륭한 기술 스택이었지만 그만큼 무겁고 사용하기 어려워 비효율적이었습니다. 더불어 EJB는 EJB의 핵심 기술인 컨테이너 기술이 EJB의 제공 업체마다 구현이 달랐고, 그로 인해 사용하는 프로그램 자체가 특정 Vendor의 기술에 종속되는 문제가 발생할 수 있었죠. 스프링은 이러한 한계와 극복을 달성하기 위해 개발됐습니다. 경량화된 구조, 간소화된 설정, 제어 역전, 자동화된 의존성 주입 등 기능을 제공함으로써 EJB 단점을 해결했죠. 하지만 누구나 쉽게 .. 2024. 11. 9.
5. 순환참조 5.1 순환참조  5.2 순환참조를 해결하는 방법순환 참조가 나쁘다는 것은 알았고, 어떻게 하면 해결할 수 있을까요? 가장 확실한 방법은 순환 참조 자체를 만들지 않는 것입니다.  5.2.1 불필요한 참조 제거불필요한 참조를 제거한다는 것은 양방향 참조가 꼭 필요한지 재고해 본다는 의미입니다. 꼭 필요하지 않은 참조를 제거하거나 필요에 따라 관계를 표현하긴 해야 한다면 한쪽이 다른 한쪽의 식별자를 갖고 있게 해서 간접 참조 형태로 관계를 바꾸는 것입니다. 만약 예로 TeamJpaEntity, MemberJpaEntity 클래스가 양방향 매핑으로 순환 참조가 있다고 가정합시다. TeamJpaEntity - @OneToMany MemberJpaEntity, MemberJpaEntity - @ManyToOne.. 2024. 11. 9.
BOJ_트리의 독립집합 [DFS, DP] 트리의 독립집합 2 초128 MB77383809283448.511%문제https://www.acmicpc.net/problem/2213그래프 G(V, E)에서 정점의 부분 집합 S에 속한 모든 정점쌍이 서로 인접하지 않으면 (정점쌍을 잇는 간선이 없으면) S를 독립 집합(independent set)이라고 한다. 독립 집합의 크기는 정점에 가중치가 주어져 있지 않을 경우는 독립 집합에 속한 정점의 수를 말하고, 정점에 가중치가 주어져 있으면 독립 집합에 속한 정점의 가중치의 합으로 정의한다. 독립 집합이 공집합일 때 그 크기는 0이라고 하자. 크기가 최대인 독립 집합을 최대 독립 집합이라고 한다. 문제는 일반적인 그래프가 아니라 트리(연결되어 있고 사이클이 없는 그래프)와 각 정점의 가중치가 양의 정수로.. 2024. 11. 9.
4. SOLID 4.1.3 리스코프 치환 원칙LSP -> '기본 클래스의 계약을 파생 클래스가 제대로 치환할 수 있는지 확인하라'라는 말은 파생 클래스가 기본 클래스의 모든 동작을 완전히 대체할 수 있어야 합니다. 파생 클래스가 기본 클래스에 할당된 의도와 계약이 무엇이니를 먼저 파악할 수 있어야 합니다. 원시적으로는 코드 작성자에게 직접 물어보기가 있지만, 명백한 한계가 있기에, 불필요한 커뮤니케이션 비용을 발생시킵니다. 이는 그리 선호하는 방법이 아니고, 세련된 방법으로 테스트 코드를 사용하는 것입니다. 초기 코드 작성자가 생각하는 모든 의도를 테스트 코드로 만들어 두는 것입니다. 그렇게 된다면, 파생 클래스를 작성하는 개발자는 테스트를 보고, 초기 코드 작성자의 의도를 파악할 수 있을 것이고, 기본 클래스로 작성된.. 2024. 11. 9.
2. 객체의 종류 객체의 종류 중에서 유명한 VO, DTO, DAO, Entity에 관해 함께 살펴보죠.  2.1 VO(Value Object: 값 객체)VO라는 것은 대체 무슨 의미일까요? VO라는 것은 클래스로 만들어진 객체를 값(value)과 같이 볼 수 있다는 의미입니다. 해당 클래스는 객체지만 동시에 값입니다. 그래서 값 객체라고 부릅니다. 그럼 값은 뭘까요? 값의 사전적 정의가 중요한 것이 아니죠. 값이라고 부르는 것의 특징 와 이것이 '소프트웨어 관점에서 어떻게 해석되는가'입니다. 이 특징을 파악한다면 이 특징들을 만족하는 객체를 만들어 그 객체를 '값 객체'라고 부를 수 있을 것입니다. 소프트웨어 설계자 입장에서 값은 불변성, 동등성, 자가 검증이라는 특징이 있습니다. 이제 해당 특징에 대해 설명할 것이고,.. 2024. 11. 5.
CS w/Backend 세미나 최근 알고리즘과 자바 언어를 위주로 공부하고 있지만, 깊게 들어갈수록 CS의 중요성을 깨닫고 있다. 그래서 kocw 강의 중 컴퓨터구조, 네트워크, 운영체제를 복기하며 정리하고 있다. 해당 글은 세미나를 참여하며 좋다고 느낀 지식을 기억하고자 개인적으로 정리한 것이다.1. 서버 아키텍처와 성능 개념 정리대규모 트래픽을 처리할 수 있는 서버 아키텍처를 설계하는 데에는 여러 개념과 성능 지표를 이해하는 것이 중요합니다.서버가 초당 처리할 수 있는 트랜잭션 수(TPS), 부하 처리 방식, 그리고 확장성을 고려해 서버의 성능을 최대화하는 방법에 대해 알아보겠습니다.2. 트래픽과 TPS (Transaction Per Second)- TPS (Transaction Per Second): 서버가 초당 처리할 수 있는.. 2024. 11. 5.
[1-5 상] 1. Object-Oriented 들어가기에 앞서특정 라이브러리, 최신 프로그래밍 언어, 인프라 기술은 '기술'이라고 분류합니다. 개발자로서 실질적인 성장을 하고 싶다면 '기술'을 공부하는 것도 아니고, '컴퓨터 공학'도 아닌 '개발'을 공부해야 합니다. 개발을 공부한다는 것은 아래와 같은 키워드를 의미합니다. OOP, 테스트, 아키텍처가 최소 조건이라 생각합니다. 우리는 기술에 집중할 게 아니라 설계나 개발 역량 같은 좀 더 추상적이고, 보편적으로 어디서든 사용할 수 있는 지식을 학습하는 데 집중해야 합니다. 프로그래밍 언어를 학습하는 것 역시 단순히 기술을 학습하는 것이며, 얼마든지 쉽게 증발할 수 있는 기술이라 말하는 것을 이해할 수 있을 것입니다. 최신 지식을 꾸준히 공부하는 것은 개발자에게 분명히 필요한 덕목입니다. 하지만 기술.. 2024. 11. 5.
Nexon Korea 정리 후 작성 예정 2024. 11. 5.
Data_Structure_Algorithm Big-O, Big-Theta, Big-Omega는 알고리즘의 시간 복잡도를 분석할 때 사용하는 점근 표기법입니다. 이들은 입력 크기 ( n )이 커질 때 알고리즘의 성능이 어떻게 변화하는지를 나타내기 위해 사용됩니다.1. Big-OBig-O는 알고리즘의 최악의 경우 성능을 나타내는 표기법으로, 주어진 함수 f(n)이 특정 함수 g(n) 보다 느리지 않다는 점근적 상한(upper bound)을 나타냅니다. 즉, Big-O 표기법은 알고리즘이 최악의 경우에 얼마나 느려질 수 있는지를 설명합니다. 예시: f(n) = 3n + 2 라면 Big-O는 O(n)으로 나타낼 수 있습니다. 2. Big-Theta Big-Theta는 알고리즘의 평균적인 성능을 나타내며 상한과 하한이 일치하는 경우를 표현합니다. f(n).. 2024. 11. 5.
Pipeline 파이프라인(Pipelining) 설계 기법파이프라인 설계는 CPU의 성능을 향상시키기 위해 각 명령어의 실행을 여러 단계로 분할하여 동시에 여러 명령어를 처리하는 방법입니다. 이를 통해 CPU는 각 사이클에 한 명령어가 아닌 여러 명령어의 일부를 실행할 수 있습니다.1. Non-Pipeline Design파이프라인을 적용하지 않은 설계 방식에는 싱글 사이클 구현과 멀티 사이클 구현이 있습니다.싱글 사이클 구현 (Single Cycle Implementation)- 설명: 모든 명령어가 한 사이클에서 실행됩니다. 각 명령어가 완료될 때까지 하나의 클럭 사이클을 사용하기 때문에, 복잡한 명령어도 동일한 사이클 내에서 처리해야 합니다.- 특징: - 구현이 단순하여 이해하기 쉽지만, 복잡한 명령어가 있는 경우.. 2024. 11. 5.
Computer Arithmetic Computer Arithmetic컴퓨터 산술은 컴퓨터가 숫자와 논리 연산을 수행하는 방법을 다루며, 이를 이해하기 위해 여러 논리 게이트, 보수 시스템, 부동 소수점 표기법 등이 필요합니다.NAND 게이트NAND 게이트는 구성의 단순성, 부품의 폭넓은 가용성, 비용 효율성 등 여러 장점이 있어, 모든 기본 논리 기능을 수행할 수 있습니다. 이는 NAND 게이트만으로도 AND, OR, NOT, XOR 등 모든 논리 연산을 구현할 수 있다는 것을 의미합니다.2의 보수 (Two's Complement)2의 보수는 컴퓨터에서 음수 표현에 널리 사용되는 방식으로, 다음과 같은 장점을 가집니다.0의 표현이 하나뿐이다.  2의 보수 표현에서는 +0과 -0이 존재하지 않으며, 0은 하나의 상태로만 표현됩니다. 이는 .. 2024. 11. 5.
BOJ - 점프2253 [DP] Java 하반기 코딩테스트를 치루며, DP 관련해서 문제가 자주 출제되었다고 생각한다. 어떤 회사의 코딩테스트인지는 밝히지 못하겠지만, 해당 문제와 비슷하게 풀었던 문제가 기억나서 글을 작성하였다. 추가로 해당 문제를 풀이한 언어로 Java 코드는 없었고, 대부분 파이썬과 C++로만 정리되어 있어, 풀이에 어려움을 겪을 분들에게 정답을 공유하고자 작성했다. 정답 풀이는 아래 Github 링크에 있고, 개인적으로 고민하며 해결함을 바랬기에 제 코드 위주로 구조적인 힌트만 간략하게 작성하였다. https://github.com/himJJong/codingtest_study/blob/master/24_11_04/boj_%EC%A0%90%ED%94%84.java codingtest_study/24_11_04/boj_점프.. 2024. 11. 4.
Linking Object File과 Linker의 역할Object File (객체 파일)컴파일러가 소스 코드를 변환한 결과물로, 크게 세 가지 유형으로 나눌 수 있습니다.1. Relocatable Object File다른 파일에 정의된 함수나 전역 변수를 참조할 수 있는 객체 파일입니다. 파일 내부에 정의되지 않은 심볼은 ?와 같은 표시로 나타나며, 나중에 Linker가 연결을 통해 참조를 해결해줍니다. 2. Executable Object File실행 가능한 완전한 파일로, 모든 심볼이 연결되어 메모리에 로드 후 실행할 준비가 된 상태입니다. 3. Shared Object File여러 프로그램에서 공유 가능한 라이브러리 파일입니다. 프로그램 실행 시 동적으로 로딩되어 메모리 사용을 효율화할 수 있습니다. Linke.. 2024. 10. 25.
Instruction Set Architecture 컴파일러와 인터프리터 그리고 컴파일 과정컴파일러컴파일러는 고급 언어로 작성된 프로그램을 해당 머신이 알아들을 수 있도록 번역해주는 도구입니다. 컴파일 과정을 통해 실행 파일이 생성되며, 이 파일은 독립적으로 실행할 수 있습니다.컴파일 과정c, java, python(source program) → Compiler → 실행 머신의 언어(Target Program)컴파일러의 동작 과정은 다음과 같은 단계로 이루어집니다:Preprocessor : #include와 같은 전처리 지시자에 따라 소스 코드의 주소를 적절히 변경하여 실행할 코드를 가져오는 단계입니다.Compilation : 전처리된 코드를 어셈블리 언어로 변환합니다.Assembler : 어셈블리 언어 코드를 머신 코드로 바꿉니다.Linker : 변환.. 2024. 10. 25.
알고리즘 기록 Github Link https://github.com/himJJong/codingtest_study (2024_01 ~ 2024_10) GitHub - himJJong/codingtest_studyContribute to himJJong/codingtest_study development by creating an account on GitHub.github.com  https://github.com/himJJong/Eggorithm_Study/tree/himJJong/himJJong%20-%20Java (2022_07 ~ 2024_01) Eggorithm_Study/himJJong - Java at himJJong · himJJong/Eggorithm_Study알고리즘 스터디 🧑🏻‍💻. Contribute to hi.. 2024. 10. 1.
9. Object 클래스와 JVM 이해과정 Java의 Object 클래스는 Java에서 모든 클래스의 조상 클래스입니다. 즉, Java에서 작성된 모든 클래스는 기본적으로 Object 클래스를 상속받으며, Object 클래스에서 제공하는 메서드를 사용할 수 있습니다. 여기서는 Object 클래스에서 중요한 5가지 메서드인 toString(), equals(), hashCode(), finalize(), clone()에 대해 구체적으로 설명하겠습니다. 1. toString() 메서드역할:toString() 메서드는 객체를 사람이 이해할 수 있는 문자열로 변환해줍니다. 이 메서드는 객체가 어떤 값을 가지고 있는지 쉽게 확인할 수 있도록 돕습니다. 왜 사용해야 하는가?기본적으로 객체를 출력하거나 디버깅할 때, 객체의 상태를 쉽게 확인할 수 있는 방법이.. 2024. 9. 21.
codeTree - Grid Compression [Hard] https://www.codetree.ai/missions/8/problems/count-number-of-points-2?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 처음보는 개념의 문제라서, 작성해보고자 한다. 비슷한 유형의 코테 문제도 많이 봤던 것 같아 자세하게 이해하고 넘어가보자!!! Pair 클래스는 해당 x,y 지점을 담을 것이고, Tuple 클래스는 직사각형의 왼쪽 아래와 오른쪽 위 지점을 담을 것이다. 신기했던 것은 nums라고 만들어진 TreeSet에 해당 좌표 x,.. 2024. 8. 16.
codeTree - PriortyQueue [Hard] https://www.codetree.ai/missions/8/problems/sum-of-kth-smallest-pair?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai    배운점 : arr1, arr2 배열의 원소들을 정렬해서 미리 배열의 원소들의 합을 구할 때 최소를 구하고자 한다. 이해가 안되었던 로직은 아래와 같다. pq는 두 배열 원소의 합 쌍을 기준으로 오름차순 정렬한 PriorityQueue이다. 1. k번째의 최솟값을 구해야 하므로 for 문을 k-1까지 진행하며, pq.. 2024. 8. 16.