2024/07 13

[프로그래머스] Lv1. 가장 많이 받은 선물

문제https://school.programmers.co.kr/learn/courses/30/lessons/258712# 문제 설명선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다.두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다.두 사람이 선물을 주고받은 기록이 하나도 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 선물을 하나 받습니다.위에서 설명한 규칙대로 다음 달에 선물을 주고받을 때, 당신은 선물을 가장 많이 받을 친구가 ..

[프로그래머스] Lv2. 요격 시스템

https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 설명최소 미사일 발사 몇번을 통해서 방어할 수 있는가에 대한 문제였다. 풀이이 문제의 경우 또 그래프인가? 탐색문젠가 브루트포스인가 병적으로 ㅎㅎ;; 생각하다가... 알고보니 정렬하면 쉽게 끝나는 문제였다. (s,e)범위라 할 때, e를 기준으로 정렬한 후에, 앞선 범위의 마지막 부분이 이번 부분의 앞부분보다 앞에 있을 경우 새로운 미사일이 필요함을 인지하면 된다.   최종코드def solut..

[모던 자바 인 액션] 스트림(Stream)

많은 요소를 포함한 커다란 컬렉션 연산 성능을 높이기 위해서는 병렬로 컬렉션 요소를 처리해야한다. 이를 구현하는 것은 단순 반복 처리 코드임에 비해서 복잡하고 어렵다. 따라서, 자바 언어 설계자들은 스트림을 만들었다. 스트림이란 무엇인가? 스트림은 자바 8 API에 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용한다면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.   List lowCaloricDishesName = menu.parallelStream() .filter(d -> d.getCalories()   위와 같이 코드를 작성할 수 있는데, 여기서 filter(sorted, map, collect)..

Language Study/Java 2024.07.25

[프로그래머스] Lv2. 도넛과 막대 그래프

문제https://school.programmers.co.kr/learn/courses/30/lessons/258711?language=cpp문제 설명도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프들이 있습니다. 이 그래프들은 1개 이상의 정점과, 정점들을 연결하는 단방향 간선으로 이루어져 있습니다.  위 세가지 그래프가 있는데 이 그래프들과 무관한 정점을 하나 생성하고, 각 도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프의 임의의 정점 하나로 향하는 간선들을 연결했다. 그 후 각 정점에 서로 다른 번호를 매겼다. 이때 우리는 그래프의 간선 정보가 주어지면, 생성한 정점의 번호와 정점을 생성하기 전 도넛의 모양 그래프의 수, 막대 모양 그래프의 수, 8자 모양 그래프의 수를 구해야한다...

Algorithm 2024.07.24

[모던 자바 인 액션] 람다 표현식

람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다표현 식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.  익명보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다.함수람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. // 기존 코드Comparator byWeight = new Comparator() { public..

Language Study/Java 2024.07.23

[모던 자바 인 액션] 동작 파라미터화 코드 전달하기

동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.  동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 대해 효과적으로 대응할 수 있는데, 코드블럭의 실행은 나중으로 미뤄진다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있고, 결과적으로 코드 블럭에 따라 메서드의 동작이 파라미터화된다.리스트의 모든 요소에 대해서 '어떤 동작'을 수행할 수 있음리스트 관련 작업을 끝낸 다음에 '어떤 다른 동작'을 수행할 수 있음에러가 발생하면 '정해진 어떤 다른 동작'을 수행할 수 있음동작 파라미터로 위와 같은 기능들을 구현할 수 있다.  프레디케이트를 활용하여 선택 조건을 결정하는 인터페이스를 아래와같이 정의할 수 있다.위 조건에 따라 filter 메서드가 다르게 동작할 것이라..

Language Study/Java 2024.07.23

[모던 자바 인 액션] 자바 8,9,10,11: 무슨 일이 일어나고 있는가?

자바가 거듭 변화하는 이유컴퓨팅 환경의 변화자바에 부여되는 시대적 변화 요구자바 8과 자바 9의 새로운 핵심 기능 소개 역사의 흐름은 무엇인가? 자바 역사를 통틀어 가장 큰 변화가 Java 8 에서 일어났다. 물론 이후의 버전에서도 큰 변화가 있었으나, 자바 8만큼 획기적이거나 생산성이 바뀌는 것은 아닐 것이다.  멀티코어 CPU 대중화 같은 하드웨어적인 변화도 영향을 미쳤다. 자바 8 등장 이전에는 스레드를 사용하는 것이 좋다고 그랬겠지만, 자바는 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려고 노력했다. 이전까지는 스레드 풀이나 병렬 실행 컬렉션, 포크/조인 프레임워크를 제공했으나, 쉽지 않았다고 한다.  🍃자바 8에서 새롭게 지원한 기술들스트림 API메서드를 코드에 전달하는..

Language Study/Java 2024.07.23

나도 모르는 사이에 카테캠 제적 위기에 놓이다

카테캠 출석 체크 최근 굉장히 충격적인 일이 있었습니다. 지난주에 너무 바빴던 나머지 매번 카테캠 학습 툴에 들어가서 출석체크를 했지만 저도 모르는 사이에 결석이 무려 6개나 찍혀있었답니다!!... 제가 마침 지난주 금요일은 건강상에 이슈로 못들어가게 되어서 결석이라 해서 "어 그렇구나~" 하고 있었는데 아니 무슨 결석이.... 지난주 월화목금 걸려있는거에요!!! 아아ㅏ앙아아악  경단 프로젝트 배포한다고 너무 정신이 없었습니다.... 대회 마감일이 코앞이라 아무것도 보이지 않아 미친듯이 개발한다고 ㅠㅠㅠ 차마 카테캠 접속해서 상주하면서 다른 멘토님이 캠 확인을 하는 것을 못했답니다..!! 출석 기록도 찍혀있는데... 캠도 켰는데 아마 네트워크 오류로 잠시 꺼진것 같더라고요! 이 사이에 검사하러 오셨다가 ..

경단[경제를 단순하게 프로젝트] SW중심대학 디지털 경진대회 회고

오랜만..! 근황먼저... 블로그는 매우 오랜만입니다... 최근 몸이 많이 안좋아졌습니다. 경단 프로젝트에 몰입한다고 한동안 밥도 잠도 제대로 먹지않고 개발만 했습니다. 경단 시작 전에 운동 삘을 받아 매우 열심히 헬스를 다니고 상승하는 추세였는데.. 인바디 점수가 77점에서 75점으로 떨어지고 골격근이... 많이 떨어졌습니다. 그리고 체력도 너무 안좋아지고, 오늘 하체하고 왔는데 너무 힘들었어요. 아침에 몸무게 재보니 51키로가 나오더라고요... 팀 결성 이번 프로젝트 팀을 조금 새롭게 모았습니다. 지난번에 다른 프로젝트를 기획했을 때는, 조금 학부생치고 잘하는 분들 6명을 모았었거든요. 그런데 놀랍게도 하루만에 팀이 대폭발했습니다.  그 당시 원인을 손꼽으라고 하면, 하드스킬은 나름대로 있었으나, 소..

RAG/ LangChain 도입

경단 프로젝트에서 기사 재생성 도메인을 맡아 개발하고 있는데, LLM의 문제점 몇 가지를 해결하고자 솔루션이 필요했다. 이번에 출전하는 대회에서도 아래 네가지에 대한 솔루션을 원했던 것 같다. - 사실 관계 오류와 맥락 이해의 한계를 개선하기 위해 도입- 최신 정보와 정확한 사실 관계 필요- 생성물의 품질과 공정성 보장 및 인간-AI 협업 방식 정립 등 해결 과제 대응- 생성 AI 기술의 혜택을 안전하고 효과적으로 제공하기 위한 방법 모색 이 배경에서 RAG라는 기술을 활용할 경우 외부 지식 베이스를 연결하여 사실 관계 파악에도 도움이 될 것이라 판단했고, 생성 능력 향상에 도움이 더욱이 될것이라 판단하여 RAG와 LangChain을 도입하게 되었다. RAG 도입RAG는, LLG의 단점 중에 ‘사실 관계..

ML 2024.07.14