inpink_의 등록된 링크

키자드에 등록된 총 96개의 포스트를 확인하실 수 있습니다.

Naver Blog

AWS Opensearch, Spring AI 오픈소스 기여 회고 - (3.a) Spring AI의 유사도 검색 role 권한 이슈 해결 & 오픈소스 멘토링 참여

안녕하세요. inpink입니다. 이번 포스팅에서는 Spring AI에 발생했던 특정 이슈의 해결 과정과 오픈소스 멘토링 경험에 대해 적어보았습니다. 제가 해결한 문제는 "OpenSearch VectorStore에 저장되어있는 벡터를 유사도 검색 시, index를 지정하지 않아서 Role 권한 이슈가 발생했던 문제"였고, 일주일만에 바로 PR 머지까지 되었습니다. https://github.com/spring-projects/spring-ai/pull/1435 (PR 링크) Include index name in OpenSearchVectorStore for similarity search by inpink · Pull Request #1435 · spring-projects/spring-ai Bug description When performing a similarity search with SearchRequest, the index name is not included. Thi

Naver Blog

AWS Opensearch, Spring AI 오픈소스 기여 회고 - (3.b) Spring AI의 유사도 검색 role 권한 이슈 해결 & 오픈소스 멘토링 참여

안녕하세요. inpink입니다. 이번 포스팅은 이전글에서 이어집니다! 이전 글을 먼저 봐주시면 감사하겠습니다 :) https://blog.naver.com/inpink_/223642046507 AWS Opensearch, Spring AI 오픈소스 기여 회고 - (3.a) Spring AI의 유사도 검색 role 권한 이슈 해결 & 오픈소스 멘토링 참여 안녕하세요. inpink입니다. 이번 포스팅에서는 Spring AI에 발생했던 특정 이슈의 해결 과정과 오픈소스... blog.naver.com 4. 테스트 코드 짜기 대부분의 오픈소스에서 테스트코드를 작성하는 과정이 필요하다. 프론트 UI 같은 경우는 테스트코드로 확인하기 어려운 부분이 있어 E2E테스트를 많이 한다고 하지만, 특히 백엔드에서는 웬만한 경우는 테스트를 해야 한다. 테스트를 통해 내가 주장하는 논리가 맞음을 증명하면 된다. 테스트 코드를 작성할 때는, "비슷한 상황에서 어떻게 테스트 코드가 작성되었는가"를 참고하는게

Naver Blog

오픈소스 기여 회고 - (4) AWS 시니어 개발자 4명과 함께 논의한 OpenSearch 캐싱 기능 추가

안녕하세요. inpink입니다. 이번 포스팅에서는 OpenSearch에 “Snapshot 캐싱 기능”을 추가하고, 최종적으로 merge까지 완료된 경험을 공유하려 합니다. 실제로 DB의 캐싱 기능을 설계하고 구현하는 과정에서 이루어진 깊이 있는 논의와 결정 과정을 담고 있습니다. 특히, 직접 GC 전략, 캐시의 soft limit, hard limit을 데이터 기반으로 설계하고 결정하는 경험은 매우 뜻깊었습니다. ㅎㅎ 올해 저는 Spring AI와 OpenSearch에 총 7건의 기여를 했습니다. 그 중에서도 이번 기여는 다음과 같은 이유로 더 특별했습니다. 전 세계 개발자들이 사용하는 오픈소스 프로젝트에 코어에 가까운 새로운 기능을 추가한 점 AWS의 시니어 개발자 4분과 함께 100개 이상의 댓글로 깊이 있는 논의를 진행한 점 흔히 접하기 어려운, 값지고 소중한 경험이었습니다. 오픈소스의 가장 큰 장점은 이렇게 무료로(?) 귀중한 경험을 쌓을 수 있다는 점이라고 생각합니다. 기여

Naver Blog

Next.js 프론트 서버 GitHub Action으로 배포 시간 71.21%, CPU 및 Memory 사용량 줄이기

안녕하세요. inpink입니다. 오늘은 프론트 서버 배포 시간을 약 71% 단축시킨 방법을 포스팅하겠습니다! 기존 환경 [AWS EC2 Instance] t2.micro (CPU 1코어, 메모리 1GiB) 단일 서버 [Front-End Framework] Next.js 14 [deploy] GitHub Actions [build] EC2 내부에서 git pull -> build - k8s를 사용할 계획이 없기 때문에 도커 사용의 필요성을 못느끼고 있고, 현재는 직접 EC2 내부에서 build 후 run하고 있었습니다. - Scale-Out이 필요하면 AWS ElasticBeanstalk을 이용할 계획입니다. - 현재 방식으로는 GitHub에서 한 build를 deploy 과정에서 또 해주기 때문에 시간이 낭비되고 있었습니다. (시간 단축 실적에는 이는 포함시키지 않았습니다.) - 시간을 아끼자고 GitHub Actions에서 build를 안해주면, 로컬에서는 되는데 x86환경에서

Naver Blog

백준 1025번 '제곱수 찾기' 파이썬(Python) / brute force

https://www.acmicpc.net/problem/1025 난이도 : 골드5 입력 n행 m열의 그래프가 입력된다. 123 456 등차수열 조건 [시작점] 모든 graph[x][y] 하나하나가 시작점이 될 수 있다. [등차수열] 수열의 요소 f1, f2, f3...에서, 모든 요소의 차이값이 같다. 예를 들어, 다음과 같은 것들은 등차수열이다. 0 0 0 0(등차 0) 1 2 3 4(등차 1) 4 3 2 1(등차 -1) 다음은 등차수열이 아니다. 0 1 2 4(고정된 등차가 아님) [그래프의 등차] 여러 칸이 포함될 수 있다. x(행)도 등차로 변하고, y(열)도 등차로 변해야 한다. n/m 0 1 2 3 0 (0,1) 1 2 (2,2) 3 4 (4,3) 예를 들어 위와 같은 그래프가 있고, 적어둔 3 칸을 선택한다고 했을 때, 아래와 같이 2가지의 등차수열이 나온다. x등차:2, y등차:1 x등차:-2, y등차:-1 문제의 예시에서 볼 수 있듯, 아래와 같은 방식으로 등차수열

Naver Blog

Spring AI의 ChatClient는 어떻게 동작할까? low-level까지 코드 뜯어보기

안녕하세요. inpink입니다. 이번 포스팅은 Spring AI의 핵심 중 하나인, ChatClient가 어떻게 동작하는지 구현 코드를 직접 뜯어본 내용을 작성했습니다. 저는 소마 프로젝트에서 AI를 사용하는 웹 프로젝트를 진행하고 있습니다. 이 때 OpenAI, StabilityAI처럼 LLM AI의 API를 호출할 일이 많은데, 이를 위해 Spring AI를 사용하고 있습니다. Spring AI는 이제 막 1.0.0 마일스톤 2가 공개된 신생 프로젝트입니다. 따라서 저희 프로젝트에서 필요한 기능이 구현되어 있지 않은 것들이 있어, 이들을 직접 구현해서 사용했고, 그 과정에서 파악한 Spring AI의 구조를 포스팅해보겠습니다. AI API 아래 사진처럼, GPT에 질문을 보내고, 응답을 받는 Chat 기능을 다들 써보셨을 것이라 생각합니다. 이를 웹 프로젝트에서 사용할 수 있게 Open AI에서 API로 제공합니다. https://platform.openai.com/docs/ap

Naver Blog

[Spring] HTTP 동기 요청에는 RestTemplate 대신 RestClient을 사용해보자

안녕하세요. inpink입니다. CardCapture 서비스에서는 HTTP 동기 요청을 처리하는데 RestTemplate대신 RestClient를 사용하고 있습니다. RestClient는 동기식 HTTP 요청을 처리할 때 매우 편리합니다. 다만 나온지 얼마 안 된 기술이다보니, 인터넷에 정보도 잘 없고, 특히 AI가 RestClient에 대한 학습이 되어있지 않아서 직접 Docs를 학습하여 사용하였습니다. Spring에서 HTTP 동기 요청에선 RestTemplate, Webclient 대신 RestClient가 좋은 이유에 대해 포스팅해보겠습니다. RestClient RestClient는 2023년 7월에 릴리즈된 Spring 6.1, Spring Boot 3.2에 새롭게 추가된 HTTP 동기식 클라이언트입니다. 현재 스프링 진영에서는 동기식 HTTP 클라이언트에는 RestClient, 비동기에는 WebClient를 밀어주고 있습니다. 기존에 동기식 HTTP 요청을 위해 사용되던

Naver Blog

[Spring] @RestClientTest로 RestClient 테스트하기 및 트러블 슈팅

안녕하세요. inpink입니다. 최근 CardCapture 프로젝트에서 레거시 코드들을 개선하고 있습니다. 그 중, 구글 OAuth2 인증을 하는 GoogleAuthService에서 사용하는 RestClient를테스트해야 하는 상황이 발생했습니다. Google API와 통신하는 서비스의 특성상, 직접적인 외부 API 호출을 하지 않고도 테스트를 진행할 방법을 고민하게 되었습니다. 이를 해결하기 위해 @RestClientTest와 MockRestServiceServer를 활용한 테스트 방법을 도입하게 되었고, 이번 글에서는 그 과정을 공유하고자 합니다. RestClient Spring의 RestClient에 대해서는 아래 포스팅에 정리해두었습니다. https://blog.naver.com/inpink_/223589319021 [Spring] HTTP 동기 요청에는 RestTemplate 대신 RestClient을 사용해보자 안녕하세요. inpink입니다. CardCapture 서비스에

Naver Blog

Spring과 RDB를 이용하여 역색인 자료구조(Inverted Index) 직접 구현, 성능 최적화

- ES처럼 구현하려 함 (ES에 역색인 자료구조 만들었을 때는 훨씬 빨랐으므로.. 이거만큼은 어렵겠지만 최대한 성능 최적화하고 싶었음) - 논문에 사용될 내용이라 ES를 사용하지 않고 직접 구현하려 함 - 최대한 주어진 자원을 이용해서 해결하려함 - 1만개의 게시글을 inverted index로 만들어서 RDB에 저장해야 했음 기존 @GetMapping("/makeInversedIndex") public ResponseEntity<String> makeInversedIndex() { for (BasePost post : postRepository.findAll()) { BasePost savedPost = postService.saveTermPost(post); System.out.println(savedPost.getId()); } return ResponseEntity.ok("success"); } @Transactional public BasePost saveTermPost(

Naver Blog

AWS Opensearch, Spring AI 오픈소스 기여 회고 - (1) 오픈소스 입문 계기

안녕하세요. inpink입니다. 최근 9~10월, Spring AI와 Opensearch에 피처 추가, 버그 수정, 문서 수정 등으로 5건 이상 기여를 하는! 뜻깊은 경험을 하였습니다 누구든 내가 원하는 오픈소스에 기여할 수 있다!를 알리기 위해 포스팅을 작성하게 되었습니다. 쓰다보니 길어져서 5편 정도의 시리즈로 나누어 올릴 예정입니다. 제 글에서 궁금한 점이나 수정하고 싶은 부분이 있으시다면 언제든 댓글주세요 :D 기여 내역은 제 깃헙에서 확인해주세요 :) 맞팔로우도 환영입니다!! https://github.com/inpink inpink - Overview @SW-Maestro-OSS. inpink has 45 repositories available. Follow their code on GitHub. github.com 오픈소스에 관심을 가진 계기 오픈소스는 이름 그대로 누구든지 기여할 수 있다. 하지만 Spring Projects, AWS Opensearch.. 이런

Naver Blog

Lucene에는 없지만 ElasticSearch에서 고가용성을 위해 추가한 Translog / refresh VS flush VS commit

안녕하세요. inpink입니다. 이번 포스팅에선 Lucene에는 없지만 ElasticSearch가 고가용성(HA)을 위해 추가한 Translog에 대해 알아보겠습니다. 또, 이 과정에서 사용되는 헷갈리기 쉬운 개념 refresh VS flush VS commit에 대해 알아보겠습니다. refresh VS flush VS commit ElasticSearch는 Lucene 을 기반으로 돌아간다. 그래서 ElasticSearch를 공부하다보면 Lucene의 용어와 개념에 대해서도 공부할 일이 꼭 생긴다. 이 3가지 용어도, ES와 Lucene의 단어가 혼용되어 헷갈리기 쉬워 정리해봤다. - ES's refresh 새로운 데이터를 "새로운 세그먼트"로 만들어서 검색할 수 있게 함. (목적이 검색 가능이다) Lucene의 flush작업을 ElasticSearch에서는 refresh라 부른다. (검색 가능하도록 한다는 행위를 이름에 반영함) 기본적으로 1초마다 작동한다. 주기 조정은 가능하지

Naver Blog

AWS Opensearch, Spring AI 오픈소스 기여 회고 - (2) 오픈소스 기여 전 보면 좋은 정보

안녕하세요. inpink입니다. 이번 포스팅은 오픈소스 기여를 처음하시는 분들이 보시면 좋을 정보를 적어봤습니다. 관련해서 많은 질문 주시면 본문 업데이트도 계속하도록 하겠습니다 이번 포스팅은 다음 글에서 이어집니다. (1편) https://blog.naver.com/inpink_/223626965476 이슈란? : 해당 오픈소스에서 업데이트해야 할 사항들을 기록해놓는 것이다. 잘 관리되는 오픈소스일수록 이슈에는 다음과 같이 태그들이 잘 붙어있다. 처음 오픈소스에 기여한다면 보기 좋은 대표적인 태그들을 정리해봤다. 모든 오픈소스에서 같은 태그를 사용하진 않지만, 높은 확률로 공통적으로 사용되거나 이름만 다르다. bug: 의도하지 않은 대로 동작하는 오류 feature/enhancement: 새로운 기능을 추가하거나, 기존 기능을 성능 향상 등을 목적으로 개선이 필요 help wanted: 이 이슈를 해결하기 위해 도움이 필요함 good first issue: 오픈소스 뉴비가 해결할

Naver Blog

Spring Boot API 호출 시 &quot;401, 403, 406 에러&quot; 해결하기 (feat. Spring Security)

서론 SW Maestro 프로젝트에서 웹 서비스를 사용자에게 제공하기 위해 프론트엔드 개발자분들과 협업을 하고 있다. 백엔드에서 제공해줘야 할 데이터 및 엔드포인트를 API로 만들고 있는데, 이 과정에서 발생한 401, 403, 406 에러를 해결한 과정을 정리해보았다. 환경 설명 Spring Boot 3.3.0 Spring Data JPA 3.3.0 Spring Security 6.3.0 OAuth 라이브러리 사용하지 않고, 기본 기능만 사용 Session 사용 X CSRF 사용 X JWT 직접 구현 Google OAuth 2.0 직접 구현 406 Not Acceptable 에러 @GetMapping("/redirect") @Hidden public ResponseEntity<JwtDto> getGoogleRedirect(@RequestParam(name = "accessToken") String accessToken, @RequestParam(name = "refreshToken

Naver Blog

Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (1) 요구사항 설명

서론 소마 프로젝트에서 다음과 같은 요구사항이 있었다. 에디터에서 스티커가 필요하다. 따라서 스티커를 S3에 저장하고, S3 주소를 포함한 스티커 정보를 RDB에 저장해야 한다. 스티커에는 태그 속성이 있다. 하나의 스티커에 대해 여러 개의 태그가 있을 수 있다. 하나의 태그에는 한국어, 영어가 있으며, 앞으로 다른 언어들도 추가될 수 있다. 태그로 스티커를 검색할 수 있어야 한다. 그래서 검색어를 넣으면, 스티커를 검색해서 반환하는 API를 제공해야 한다. 완성 화면 (테스트 화면이고 실제 UI는 이렇게 못생기지 않았따. 실제 UI는 오픈 이후를 기대해주세요 하하) 이 과정에서 겪은 트러블슈팅 과정을 정리해보았다. 이번 포스팅에서는 트러블슈팅이 주요 포스팅 목적이므로, 요구사항을 구현한 방법은 간단히 설명하고 아래 문제들을 해결한 방법을 정리해보겠다! 문제들 1) n+1 문제 2) 영속성 컨텍스트에서 null이 주입되지 말아야 할 상황에 null이 주입되는 경우 요구사항 구현

Naver Blog

DTO 안에 DTO를 쓸 때 발생할 수 있는 문제 해결

개발 배경 다음과 같은 화면의 프롬프트의 데이터를 받아 RDB에 저장해야 하는 요구사항이 있었다. 이를 받을 수 있도록 PromptRequestDto를 설계했다. Dto 내부에 Dto가 있는 방식으로 설계했다. @Getter @RequiredArgsConstructor @ToString public class PromptRequestDto { @NonNull @Valid private final PhraseDto phrase; @NonNull @Valid private final EmphasisDto emphasis; @NotBlank private final String purpose; @NotBlank private final String color; @NotBlank private final String model; } 하나의 PromptRequestDto에 너무 많은 필드가 있는 경우, 코드 길이가 길어져 가독성을 해칠 수 있으며, 캡슐화 가능한 Phrase와 Emphasis

Naver Blog

Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (2) n+1문제

[ 이전 글 ] Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (1) 요구사항 설명 https://blog.naver.com/inpink_/223513682704 Spring Boot 테스트에서 @DataJpaTest 시만났던 문제들 해결 - (1) 요구사항 설명 서론 소마 프로젝트에서 다음과 같은 요구사항이 있었다. 에디터에서 스티커가 필요하다. 따라서 스티... blog.naver.com N+1 문제 해결 @Repository public interface StickerRepository extends JpaRepository<Sticker, Long> { //@EntityGraph(attributePaths = "tags") // N+1문제 해결 //@Query("SELECT DISTINCT s FROM Sticker s LEFT JOIN FETCH s.tags t WHERE t.korean LIKE %:korean% OR t.english

Naver Blog

Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (3) 영속성 컨텍스트 일차 캐시 null 주입

[ 이전 글 ] Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (1) 요구사항 설명 https://blog.naver.com/inpink_/223513682704 Spring Boot 테스트에서 @DataJpaTest 시만났던 문제들 해결) - (2) n+1문제 https://blog.naver.com/inpink_/223519566141 @DataJpaTest 영속성 컨텍스트가 연관 객체에 null을 넣는 문제 해결 나는 위의 과정을 거쳐 주어진 요구사항 중 기본적인 구현을 완료했다. (이전 글 참고) postman과 Next.js로 짠 html&&typescript를 이용해 End to End가 잘 동작하는 것도 확인했다. 그리고 추후 인덱스 및 커서 기반 조회 등의 기능을 추가하고, 리팩터링을 하기에 앞서, 추후 운영 코드가 변하더라도 요구사항을 잘 충족하는 것을 최대한, 그리고 효율적으로 보장하기 위해 "테스트 코드"를 작성하려 하였다. C

Naver Blog

Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (4) 마무리 및 감사인사

[ 이전 글 ] Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (1) 요구사항 설명 https://blog.naver.com/inpink_/223513682704 Spring Boot 테스트에서 @DataJpaTest 시만났던 문제들 해결) - (2) n+1문제 https://blog.naver.com/inpink_/223519566141 Spring Boot 테스트에서 @DataJpaTest 시 만났던 문제들 해결 - (3) 영속성 컨텍스트 일차 캐시 null 주입 https://blog.naver.com/inpink_/223519569370 처음으로 시리즈 형식으로 글을 써보았는데, 트러블 슈팅 과정도 재미있었고 블로그에 이 과정을 공유할 수 있다는 점도 뿌듯하다. 소마 센터에서 이 문제로 같이 토론해준 BE짱 친구들 땡큐땡큐! 왼쪽부터 친구들 깃허브 주소 남깁니당 https://github.com/GGHDMS GGHDMS - Overview

Naver Blog

스펙업 카페에 내가 쓴 SW Maestro 합격 회고 글이 올라가다 :D

어느 날 내 소마 합격 회고글에 아래와 같은 댓글이 달렸다. 처음에는 스팸인가 싶었는데, 스펙업에 실제로 운영진분들이 이런 후기를 오랫동안 많이 관리해온 것을 확인했고, 감사한 마음으로 OK를 말씀드렸다! 스펙업은 나도 학생 때부터 자주 찾던 200만명 이상이 가입한 큰 카페이다. 이런 곳에 내가 남들에게 도움을 줄 수 있는 글로 기여를 할 수 있다는 점이 기쁘고 뿌듯했다. 이런 좋은 기회를 주신 것만해도 감사한데, 후기를 올리는 대가로 소정의 선물도 주셨다! ㅎㅎ 감사합니다 아래 게시글에 업로드 되었다 :D https://cafe.naver.com/specup/7486697 [SW Maestro] 소프트웨어 마에스트로 15기 합격후기 대한민국 모임의 시작, 네이버 카페 cafe.naver.com 소마를 합격하고 좋은 일들이 너무 많이 일어나는 것 같다. 내가 하고 싶은 것을 꾸준히 할 수 있고, 내가 하고 싶은 걸 열심히 했을 뿐인데 남들에게 긍정정인 도움도 줄 수 있다는 점이

Naver Blog

Spring AI란? &quot;Introducing Spring AI&quot; 공식 세션, 공식 GitHub 번역 (1)

안녕하세요. inpink입니다. 이번 포스팅은 "Spring AI 공식 GitHub, 세션 번역"을 담고 있습니다. 주로 "Spring AI의 등장 배경, 핵심 가치"에 대해 설명하고 있는 글입니다. 저는 요즘 SW Maestro에서 Spring 백엔드 및 LLM AI 개발을 하고 있습니다. LLM을 호출하는 웹 프로젝트의 백엔드 개발을 위해, 이제 막 1.0.0 버전이 공개된 따끈따끈한 Spring AI를 공부해 도입하고 있습니다. 그 과정에서 공부한 내용을 정리해보았습니다! Spring AI 등장 배경 및 개발 의도 Q. 기존에 AI는 주로 Python으로 개발되어왔다. 그런데 Java를 쓰는 Spring AI로 정말 AI 개발을 할 수 있을까? https://github.com/spring-projects/spring-ai?tab=readme-ov-file GitHub - spring-projects/spring-ai: An Application Framework for AI

Naver Blog

유저로부터 똑같은 결제 요청이 3개 도착하면 백엔드에선 어떻게 동시성을 제어할까? (따닥 문제)(실제 토스페이먼츠와 계약)

안녕하세요. inpink입니다. SW Maestro에서 저희 rocket-dan 팀은, 유저에게 "실제 카드 결제"를 제공하여 저희 서비스를 프리미엄화하고, 더 좋은 퀄리티의 서비스를 제공하기 위해 "유료 결제"를 구현했습니다. 저희 팀의 많은 서비스 중, 저는 "결제"에 해당하는 전체 flow(사업자 등록부터, 계약, 프론트엔드, 백엔드 개발까지)를 담당했습니다. 사업자등록도 내고, 포트원 및 토스페이먼츠와 계약까지 하는 신선한 경험을 할 수 있었습니다. ㅎㅎ 이 과정에서 프론트엔드 개발 파트까지 맡아볼 수 있어서, 재밌는 경험이었고 여러모로 많이 배울 수 있었습니다. <전체 결제 flow는 추후에 포스팅해보도록 하겠습니다. > 인감증명서 처음 뽑아봤어요..ㅎ "실제 카드 결제"를 구현하며 겪은 트러블슈팅 중 하나인, "똑같은 결제 요청이 여러 개 도착했을 때 동시성 처리를 어떻게 할 것인지"에 대해 정리해보았습니다. 이 문제는 "따닥 문제"라고 알려진 유명한 문제 상황입니다. 문

Naver Blog

Spring 모니터링 중 에덴 스페이스(Eden Space)가 규칙적인 양상을 보이는 이유

안녕하세요. inpink입니다. 최근 애플리케이션 출시를 앞두고 Grafana, Prometheus, Spring Actuator를 이용해서 백엔드 서버의 데이터를 수집하고 시각화했습니다. 여기서 궁금한 점이 생겨 테스트를 하나 진행해봤습니다! 시스템 구성 1. Spring Actuator /actuator라는 경로로, Prometheus같은 도구가 Metric 수집을 할 수 있도록 Endpoint를 제공한다. 2. Prometheus Spring Actuator에서 노출한 메트릭을 수집하고 저장한다. 3. Grafana Prometheus에 저장된 데이터를 시각화한다. 연동되어 데이터를 시각화하고 있는 Grafana Eden Space 여기서, Eden Space에 다음과 같이 규칙적인 양상을 보이길래 왜 그런지 궁금해서 테스트를 해보았다. 우선 Eden Space가 뭔지 먼저 알고가자. Java 힙 메모리는 다음과 같은 세 가지 영역으로 나뉜다. Java Heap Memory

Naver Blog

JWT verify(검증) 시 DB에서 회원 조회 검증을 해야 할까?

안녕하세요. inpink입니다. 저희 프로젝트에서는 JWT를 통해서 회원 인증을 하고 있습니다. Token이 서버에 도착했을 때, 이 것이 옳은 토큰인지 검증하는 과정(verify)이 필요합니다. verify를 어떻게 구현했는지, verify 시 DB에서 회원 조회 검증을 해야 할지 에 대해 고민하고 설계한 과정을 포스팅해보겠습니다. 저는 다음과 같은 방법으로, 유저의 JWT가 타당한지 검증해줬습니다. java-jwt 라이브러리를 사용해 구현했습니다. @Component @Getter public class JwtComponent { private final JwtConfig jwtConfig; private final Algorithm jwtHashAlgorithm; private final JWTVerifier jwtVerifier; public JwtComponent(JwtConfig jwtConfig) { this.jwtConfig = jwtConfig; this.jwtHas

Naver Blog

(미)Elastic Beanstalk으로 고가용성 Spring Boot 분산환경 배포하기 (Feat. RDS, Load Balancer) (1)

안녕하세요. inpink입니다. 내용은 곧 출시라 출시 이후에 적어보겠습니다~!

Naver Blog

[회고] 소프트웨어 마에스트로 15기 최종 합격(1) : 사전 준비, 지원서 작성, 1차 코딩 테스트

#SWMaestro #소프트웨어마에스트로 #소마 부제목: 2024년 상반기(1,2,3월) 회고 서론 안녕하세요. 소프트웨어마에스트로(SWM) 15기 최종 합격 회고를 작성해보려고 합니다. 내용이 길어져서 1,2편으로 나누어 작성했습니다. SWM뿐만 아니라 2024년 1,2,3월을 어떻게 보냈는지 개발 일상도 담겨있습니다. 저의 경험이 이 글을 보시는 분들께 조금이라도 도움이 되셨으면 좋겠습니다. 지원서 작성 (1월 초~ 2월 초) 지원서 제출 기간 올해 15기는 SWM 홈페이지에서 1월 8일부터 2월 7일까지 지원이 가능했다. https://swmaestro.org/sw/main/main.do SW마에스트로 세상을 움직이는 최고급 SW 인재양성의 메카 SW마에스트로는 "창의 도전형 프로젝트 기획 개발" 교육과정을 운영하여 프로젝트 성과가 우수한 연수생을 선발하여 글로벌 SW역량강화 교육 프로그램을 지원합니다. 이전 정지 다음 SW Maestro Guidelines 연수생 특전 IT

Naver Blog

백준 14719번 '빗물' 파이썬(Python) / 구현

https://www.acmicpc.net/problem/14719 난이도 : 골드5 소요시간 : 40분 [문제 접근 방법] 빗물이 고이는 양을 어떻게 구할까?만 생각한다면, 구현은 어렵지 않은 문제이다. 다만 이 방법을 생각하는 것이 까다로울 수 있다. => 각 index에서 쌓이는 빗물량을 구해야 한다. [빗물이 고이는 조건] index가 a인 지점에서 빗물이 고이려면, 전체 height에서 a왼쪽에 있는 가장 큰 값보다 a가 더 작고, a오른쪽에 있는 가장 큰 값보다 a가 작아야 한다. 예를 들어서 위 그림을 보자. 위 그림에서는 index=4,5,6인 부분에 빗물이 고였으며, 각각 3,2,3씩 고였다. index가 5인 a의 height가 1일 때, leftMaxHeight= index가 3인 height의 3 rightMaxHeight= index가 7인 height의 6 즉, 3 1 6으로 둘러쌓인 것으로 빗물이 쌓이게 된다. 이 때, 쌓이는 빗물 양은 min(leftMa

Naver Blog

백준 16234번 '인구 이동' 파이썬(Python) / 구현, 시뮬레이션, 그래프 탐색(BFS/DFS)

난이도 : 골드4 소요시간 : 70분 문제 태그 #구현 #시뮬레이션 #그래프탐색 #bfs #dfs 나는 bfs로 풀었다. 그래프 탐색 기반 구현 및 시뮬레이션 문제라, 구현 시간이 조금 걸릴 수 있는 문제이다. 문제 설명 문제에서 준 조건 자체는 간단하다. 1) 두 맞닿은 국가에 대해, L이상의 R이하만큼 차이가 난다면 국경이 열린다. 2) 국경이 열리고 서로 맞닿아 있는 국가들끼리는 "연합"이 된다. 3) 모든 연합이 정해졌으면, 각 연합끼리는 인구 수를 1/n씩 나눠 가진다. ----여기까지 하나의 turn 4) 인구 이동이 더 일어나지 않을 때까지 1)~3) 과정을 반복하며, 정답 출력은 총 turn의 개수가 된다. 하지만 5번 예시가 이 문제의 핵심이자, 함정이라 할 수 있다. 한 번의 turn에서, 단순히 한 개의 연합만 존재하지 않는다. 여러 개의 서로 다른 연합이 존재할 수 있다. 5번은 아래와 같이 turn이 2개일 것으로 오해하기 쉽다. 이는 한 turn에서 하나의

Naver Blog

[데이터 중심 애플리케이션 설계] 05.복제 - 고가용성, 비동기/반동기/동기식 복제, 장애 복구

포스팅 동기 데이터 관점에서 복제가 중요한 이유 데이터 중심 애플리케이션 설계 저자 마틴 클레프만 출판 위키북스 발매 2018.04.12. 소마에서 "데이터 중심 애플리케이션 설계"라는 책으로 기Dragon Mentor님과 스터디를 진행하고 있다 :D 실무 및 면접에서 등장할 지식들이 많아, 책에 적혀있는 내용에서 살을 덧붙여서 포스팅해보려고 한다! 이번 포스팅에서 나올 용어들 이번 포스팅에서 나올 용어들을 모아봤습니다. 각 용어의 뜻은 포스팅에 등장하니, 글을 정독해주시거나 Ctrl+F로 찾아주세용! Replica(레플리카) Replication (레플리케이션) 고가용성(High Availability, HA) 부하 분산(Load Balancing) 파티셔닝(샤딩) 비동기식(Asynchronous) 복제 반동기식(semi-synchronous) 복제 동기식(Synchronous) 복제 지연 시간(latency) 데이터의 일관성 CDC(Change Data Capture) 서론 현대

Naver Blog

백준 2212번 '센서' 파이썬(Python) /그리디

https://www.acmicpc.net/problem/2212 난이도 : 골드5 소요시간 : 35분 [문제 설명] 지문만 읽어서는 이해하기 상당히 쉽지 않은 문제이다. 현재까지 백준에서 풀었던 860문제 중, 지문이 요구사항을 잘 표현하지 못하는 문제 top 1이라고 생각한다. 따라서 문제 이해는 아래와 같이 해주는 것이 좋다. 백준 질문 게시판에 있는 설명 글을 참고했다. 출처 : https://www.acmicpc.net/board/view/46572 N개의 센서가 주어진다. K개의 집중국을 세워야 한다. 각 센서는 무조건 1개 이상의 집중국의 영향을 받아야 한다. 구해야 할 정답: 각 집중국이 감당하는 센서들의 거리의 합이 최소가 되어야 한다. 이 때의 거리가 정답이다. [문제 풀이] k=5 문제에서 주어진 2번 예시를 보자. 센서의 위치는 1차원 좌표이므로, 위와 같이 정렬한다. 각 센서간의 거리 차를 구한다. 집중국은 센서 위치 위에 세우자. (해당 센서와의 거리가 0이

Naver Blog

백준 13904번 '과제' 파이썬(Python) / 그리디, 힙(Priority Queue)

https://www.acmicpc.net/problem/13904 난이도 : 골드3 소요시간 : 30분 [문제 설명] 하루에 최대 1개의 문제를 풀 수 있다. 문제는 "마감일, 점수"로 이루어져 있다. 마감일이 지나면 점수를 얻을 수 없다. 얻을 수 있는 점수의 최댓값을 구해야 한다. 문제를 못푸는 날도 존재할 수 있다. 그리디와 힙으로 푸는 문제이다. 문제 풀이를 떠올리는 것은 그렇게 어렵지 않으나, 예시가 1개만 주어지기 때문에 예외 케이스 하나를 생각하지 못하면 한 번 틀릴 수 있는 문제이다. [문제 풀이] 각 마감일에 닥친 문제의 점수를 map에 담는다. 이 때, 점수가 큰 것을 먼저 뽑도록 value는 heap을 사용한다. homeworks={4: [-60, -40, -10], 1: [-20], 2: [-50], 3: [-30], 6: [-5]} [-60, -40, -10] 부분이 heap이다. 파이썬 heap 자료구조 특성상, 최대 힙을 사용하기 위해 점수에 -1을 곱해

Naver Blog

[데이터 중심 애플리케이션 설계] 05.복제 -

5장 163p~169p 이번 포스팅에서는 책에 굵은 글씨로 등장하는 "용어"를 잘 이해하는 것이 중요하다고 생각이 된다. Q. DB에서 복제 지연이 나타나는 원인? A. 1. 네트워크 문제: 네트워크 연결이 느리거나 불안정할 경우 데이터 전송이 지연될 수 있다. 2. 높은 트래픽: 주 데이터베이스에서 많은 양의 트랜잭션이 처리될 때, 많은 트래픽이 발생하고, 복제 서버가 처리할 수 있는 양을 초과하는 데이터 변경이 발생하여 복제 지연이 발생할 수 있다. 3. 성능 문제: 복제 서버의 성능이 주 데이터베이스 서버보다 낮은 경우에 복제 지연이 발생할 수 있다. 4. 하드웨어 문제: 복제 서버의 하드웨어(디스크, 메모리 등)의 문제도 복제 지연을 발생시킬 수 있다. 읽기 확장(read-scaling) 대부분이 읽기 요청이고 쓰기 요청의 비율이 적은 경우, 읽기 요청이 많아질 때 간단히 팔로워를 더 추가하여 부하 분산을 할 수 있다. 이를 통해 리더의 부하를 분산시킬 수 있다. 현실적으로

Naver Blog

백준 5582번 '공통 부분 문자열' 파이썬(Python) / 투 포인터, DP

https://www.acmicpc.net/problem/5582 난이도 : 골드5 문제를 푸는 2가지 방법 5582번 문제는 교육적으로 상당히 좋은 문제라고 생각한다. 나는 이 문제를 2가지 방법으로 풀어보았다. 1) 슬라이딩 윈도우(sliding window) 2) DP 메모리 제한이 256MB로 빡빡하여 2번도 pypy3으로만 통과했지만, 문제 풀이를 잘 익혀두면 좋을 문제라 생각한다! 문제 설명 문제는 간단하다. 두 문자열에서, 가장 긴 일치하는 부분 문자열의 길이를 구하면 된다. 정답=5 문제 풀이 - 투 포인터(Two Pointers) 슬라이딩 윈도우(Sliding Window) 문제 풀이를 보기 전에, 슬라이딩 윈도우의 개념에 대해 먼저 보도록 하자. 슬라이딩 윈도우 알고리즘에서는 고정된 크기의 윈도우가 움직인다. 이전의 윈도우와 이후의 윈도우에서 공유되는 값이 있기 때문에, 이를 활용할 수 있는 문제에서 쓰면 좋다. 이번 문제에서 쓴 투 포인터(Two Pointers)

Naver Blog

4가지 유명한 API 프로토콜: REST, GraphQL, Webhook, gRPC (feat. ByteByteGo 기술 블로그)

기D 멘토님과 SW Maestro 연수생분들과 ByteByteGo라는 기술 블로그의 포스트를 공부하는 스터디를 진행하고 있다. 나는 API 프로토콜에 대한 내용을 보고 추가로 학습한 내용을 정리해보았다. ByteByteGo란? 유명 도서 "가상 면접 사례로 배우는 대규모 시스템 설계 기초"의 저자 "알렉스 쉬"가 운영하는 블로그이다. 영어로 된 CS 관련 컬럼이 주기적으로 올라온다. https://bytebytego.com/ ByteByteGo | Technical Interview Prep Everything you need to take your system design skill to the next level bytebytego.com https://www.youtube.com/channel/UCZgt6AzoyjslHTC9dz0UoTw ByteByteGo Covering topics and trends in large-scale system design, from the au

Naver Blog

백준 22859번 'HTML 파싱' 파이썬(Python)/정규표현식, 파싱

https://www.acmicpc.net/problem/22859 22859번: HTML 파싱 문제 웹 크롤링을 하여 HTML을 가공하는 프로그램을 만들려고 한다. HTML은 아래와 같이 구성되어있다. (문제 일반화를 위해 실제 HTML 소스 코드 및 태그가 실제 존재하는 것과 다를 수 있다.) <main> <div title="title_name_1"> <p>paragraph 1</p> <p>paragraph 2 <i>Italic Tag</i> <br > </p> <p>paragraph 3 <b>Bold Tag</b> end.</p> </div> <div t... www.acmicpc.net 난이도 : 골드3 정규표현식 라이브러리를 잘 알고 있고 활용할 수 있어야 하는 문제이다. 이전 포스팅(https://blog.naver.com/inpink_/223363133123) 에 이어 추가 사용법을 정리해보았다. 백준 1013번 'Contact' 파이썬(Python) /정규표현식 정리

Naver Blog

백준 4779번 '칸토어 집합' 파이썬(Python) / 재귀

https://www.acmicpc.net/problem/4779 4779번: 칸토어 집합 문제 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자. 1. -가 3 N 개 있는 문자열에서 시작한다. 2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다. 3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속... www.acmicpc.net 난이도 : 실버3 재귀를 이용한 문제이다. 1) 재귀를 이용하는 문제인지 파악해야 하고, 2) 재귀 구현도 잘 해야한다. 전체를 3등분으로 나눠서, 1번째와 3번째는 계속 재귀를 보내주면 된다. 이 때,start와 end와 stan

Naver Blog

백준 1715번 '카드 정렬하기' 파이썬(Python) /그리디, 힙

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 1715번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 카드 정렬하기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 64408 22387 17153 34.150% 문제 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다. 매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶... www.acmicpc.net 난이도 : 골드4 [문제 해결 로직] 로직을 짜고 나면 구현은 매우 쉬운 문제 "그리디"와 "힙"을 이용한다. 카드 묶음을 1개로 만드는 것이 목적이다. n=1인 경우, 0을 출력한다. 이미 1개의 카드 묶음이 만들어졌기 때문이다

Naver Blog

백준 1339번 '단어 수학' 파이썬(Python) /그리디

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 문제 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이... www.acmicpc.net 난이도 : 골드4 그리디 그리디 해법은 "어떻게 증명되나"가 매우 중요하다고 생각한다. ABC라는 문자가 있다면, A*100+B*10+C 만큼의 숫자가 합계에 더해지게 된다. 모든 문자를 대상으로, 그 문자가 몇번이나 등장하는지 co

Naver Blog

백준 1074번 'Z' 파이썬(Python) /분할 정복, 재귀

https://www.acmicpc.net/problem/1074 1074번: Z 문제 한수는 크기가 2 N × 2 N 인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2 N-1 × 2 N-1 로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 2 2 × 2 2 크기의 배열을 방문한 순서이다. N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. 다음은 N=3일 때의 예이다. 입력 첫째 줄에 정수 N, r, c가 주어진다. 출력 r... www.acmicpc.net 난이도 : 실버1 순수 재귀를 사용하면 안되는 이유 문제에서 요구한 대로 4등분하여 좌상, 우상, 좌하, 우하 4개를 모두 재귀를 돌린다면 시간초과가 뜬다. 2^15=32768으로, 만약 (2^15-1,2^15-1)번째 항까지 가는 걸 하나

Naver Blog

백준 5639번 '이진 검색 트리' 파이썬(Python) / 재귀, 트리

https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다. 왼쪽, 오른쪽 서브트리도 이진 검색 트리이다. 전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예를 들어, 위의 이진 검색 트리의 전위 ... www.acmicpc.net 난이도 : 골드5 재귀 문제는 "분할"해서 보는 시야, 아이디어가 중요한듯. 이 문제도 "분할"과 "트리 탐색"의 2가지 아이디어가 합쳐져야 풀 수 있는 문제였다. 0) while try catch로 EOF 입력을 받는다. 숫자

Naver Blog

백준 13116번 '30번' 파이썬(Python) / 트리

https://www.acmicpc.net/problem/13116 13116번: 30번 문제 혹시 2007학년도 대학수학능력시험 수리영역 가형 이산수학 30번 문제를 아는가? 여러분은 수능을 치는 수험생의 마음으로 이 문제를 해결해야만 한다. 하지만 우리는 저작권 위반으로 판사님을 뵙고 싶지 않았기 때문에 이 문제를 직접 수록할 수는 없었다. 아래 링크 중 하나를 클릭해서 pdf 파일을 내려받아 가장 마지막 페이지를 보면, 위의 그림과 아주 유사한 문제가 하나 있을 것이다. 여러분은 바로 그 문제를 해결해야만 한다. http://wdown.ebsi.co.kr/W61001/01exam/20061116/mathga1_mu... www.acmicpc.net 난이도 : 실버4 1) 위와 같은 트리에서, 모든 노드의 부모는 (노드번호//2)이다. 2) A의 모든 부모와, B와 모든 부모를 구하고, 교집합의 최대값*10을 출력한다. python set 연산 setA | setB # 합집합 s

Naver Blog

백준 2240번 '자두나무' 파이썬(Python) /DP

https://www.acmicpc.net/problem/2240 2240번: 자두나무 2240번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 자두나무 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 16788 6143 4480 38.193% 문제 자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어지는 자두를 받아서 먹고는 한다. 자두를 잡을 때에는 자두가 허공에 있을 때 잡아야 하는데, 이는 자두가 말랑말랑하여 바닥에 떨어지면 못 먹을 ... www.acmicpc.net 난이도 : 골드5 DP 문제이다. "i초, j위치, k움직인 횟수"에서의 최적값을 3차원 DP 리스트에 담으면서 진행한다. i의 범위는 1~t초 j는 1,2 k는 0~t번 점화식은 다음과 같다. DP에는 i초,j위치,k움직임 횟수에서

Naver Blog

백준 1038번 '감소하는 수' 파이썬(Python) / DP, 조합(combinations)

https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 1038번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 감소하는 수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 512 MB 28685 9267 7308 34.547% 문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다... www.acmicpc.net 난이도 : 골드5 <서론> 이 문제는 굉장히 다양한 풀이법이 있어서 흥미로워 포스팅해보았다. 요즘 문제를 간단하게 보는 방법을 훈련하고 있는데, 조금 좋아진 것 같으나 갈 길이 멀어 보인다. <공통> 감소하는 수는 0부터 시작해서

Naver Blog

백준 1520번 '내리막 길' 파이썬(Python) / DFS + DP + 재귀

https://www.acmicpc.net/problem/1520 1520번: 내리막 길 문제 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으며, 각 지점 사이의 이동은 지도에서 상하좌우 이웃한 곳끼리만 가능하다. 현재 제일 왼쪽 위 칸이 나타내는 지점에 있는 세준이는 제일 오른쪽 아래 칸이 나타내는 지점으로 가려고 한다. 그런데 가능한 힘을 적게 들이고 싶어 항상 높이가 더 낮은 지점으로만 이동하여 목표 지점까지 가고자 한다. 위와 같은 지도에서는 다음과 같은 세 가지 경로가 가... www.acmicpc.net 난이도 : 골드3 시간 초과 DFS만을 이용하면 시간초과이다. 각 노드에서 매번 갈 수 있는 경로를 다 구해주면 4**(500*500)의 경우가 있으므로 엄청난 시간초과 가지치기가 필요하다. DFS에 DP, 재귀 아이디어를 더해 시간

Naver Blog

백준 19236번 '청소년 상어' 파이썬(Python) / 구현, 시뮬레이션, 백트래킹

https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 4×4크기의 공간이 있고, 크기가 1×1인 정사각형 칸으로 나누어져 있다. 공간의 각 칸은 (x, y)와 같이 표현하며, x는 행의 번호, y는 열의 번호이다. 한 칸에는 물고기가 한 마리 존재한다. 각 물고기는 번호와 방향을 가지고 있다. 번호는 1보다 크거나 같고, 16보다 작거나 같은 자연수이며, 두 물고기가 같은 번호를 갖는 경우는 없다. 방향은 8가지 방향(상하좌우, 대각선) 중 하나이다. 오늘은 청소년 상어가 이 공간에 들어가 물고기를 먹으려고 한다. 청소년 상어는 (0, 0)에 있는 물고기를 먹고, (0, 0)에 들어가... www.acmicpc.net 난이도 : 골드2 상당한 빡구현 문제였다. 구현+시뮬레이션+백트래킹을 사용하는 문제임은 어렵지 않게 파악할 수 있었고, (문제를 쉽게 보려는 노력!) 중간에 재귀과정에서 deepcopy된 graph를 전달하는 과정에서 이슈가 있

Naver Blog

백준 1005번 'ACM Craft' 파이썬(Python) / 위상 정렬(Topological Sort)

https://www.acmicpc.net/problem/1005 1005번: ACM Craft 문제 서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다. 이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한 게임 진행을 위해 건물을 짓는 순서가 정해져 있지 않다. 즉, 첫 번째 게임과 두 번째 게임이 건물을 짓는 순서가 다를 수도 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을 시작하여 완성이 될 때까지 Delay가 존재한다. 위의 예시를 보자. 이번 ... www.acmicpc.net 난이도 : 골드3 # 위상 정렬(Topological Sort) 위상정렬(topological sort)이란? 특정 노드를 방문하기 위해서 선행 방문해야 하는 노드가 존재할 때, 선행 조건을 모두 지키면서 모든 노드를 방문하는

Naver Blog

백준 1948번 '임계경로' 파이썬(Python)

https://www.acmicpc.net/problem/1948 1948번: 임계경로 문제 월드 나라는 모든 도로가 일방통행인 도로이고, 싸이클이 없다. 그런데 어떤 무수히 많은 사람들이 월드 나라의 지도를 그리기 위해서, 어떤 시작 도시로부터 도착 도시까지 출발을 하여 가능한 모든 경로를 탐색한다고 한다. 이 지도를 그리는 사람들은 사이가 너무 좋아서 지도를 그리는 일을 다 마치고 도착 도시에서 모두 다 만나기로 하였다. 그렇다고 하였을 때 이들이 만나는 시간은 출발 도시로부터 출발한 후 최소 몇 시간 후에 만날 수 있는가? 즉, 마지막에 도착하는 사람까지 도착을 하는 시간을 의미한다. 어떤 사람은 이 시간에 만나... www.acmicpc.net 난이도 : 플레5 정답 코드 import sys input=sys.stdin.readline from collections import deque n=int(input()) m=int(input()) times=[0] inDegree=

Naver Blog

프로그래머스 '단어 변환' 파이썬(Python) /bfs

https://school.programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변... school.programmers.co.kr 난이도 : LV3 소요시간 : 20분 bfs, dfs, dijkstra로 풀 수 있는 문제이다. 나는 bfs로 풀었다. 아무래도 재귀 트리를 사용하는 dfs보다

Naver Blog

백준 11657번 '타임머신' 파이썬(Python) /벨만-포드(Bellman-Ford)

https://www.acmicpc.net/problem/11657 11657번: 타임머신 문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 버스가 M개 있다. 각 버스는 A, B, C로 나타낼 수 있는데, A는 시작도시, B는 도착도시, C는 버스를 타고 이동하는데 걸리는 시간이다. 시간 C가 양수가 아닌 경우가 있다. C = 0인 경우는 순간 이동을 하는 경우, C < 0인 경우는 타임머신으로 시간을 되돌아가는 경우이다. 1번 도시에서 출발해서 나머지 도시로 가는 가장 빠른 시간을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M ... www.acmicpc.net 난이도 : 골드4 벨만 포드(bellman-ford) 알고리즘 시작점이 고정되어있고, 다른 모든 노드로 가는 최소 경로를 구하는 문제에서 주로 "다익스트라"를 사용하곤 한다. 하지만 이 문제는 일반적인 "다익스트라"로 풀기 어렵다.

Naver Blog

백준 1219번 '오민식의 고민' 파이썬(Python) /벨만 포드, bfs or dfs

https://www.acmicpc.net/problem/1219 1219번: 오민식의 고민 문제 오민식은 세일즈맨이다. 오민식의 회사 사장님은 오민식에게 물건을 최대한 많이 팔아서 최대 이윤을 남기라고 했다. 오민식은 고민에 빠졌다. 어떻게 하면 최대 이윤을 낼 수 있을까? 이 나라에는 N개의 도시가 있다. 도시는 0번부터 N-1번까지 번호 매겨져 있다. 오민식의 여행은 A도시에서 시작해서 B도시에서 끝난다. 오민식이 이용할 수 있는 교통수단은 여러 가지가 있다. 오민식은 모든 교통수단의 출발 도시와 도착 도시를 알고 있고, 비용도 알고 있다. 게다가, 오민식은 각각의 도시를 방문할 때마다 벌 수 있는 돈을 알고있다. 이... www.acmicpc.net 난이도 : 플레5 벨만 포드에 bfs 또는 dfs를 사용하는 문제이다. bfs/dfs는 사이클이 발생했을 때, end에도 영향을 주는 지 알아보기 위함이다. 이전 벨만포드 문제들에선 end 상관없이 사이클이 발생하는지를 묻는 문제

Naver Blog

백준 1013번 'Contact' 파이썬(Python) /정규표현식 정리

https://www.acmicpc.net/problem/1013 1013번: Contact 문제 “무한히 넓은 저 우주에 인류만이 홀로 존재한다면, 그건 정말 슬픈 일이 아닐까요” 푸에르토리코 아레시보에 위치한 아레시보 전파망원경(Arecibo radio telescope)은 수십 년째 존재하지 않을 지도 모르는 외계 문명으로부터의 전파를 수신하기 위해 밤하늘을 바라보고 있다. 이 망원경이 수집한 전파 속에서 자연적으로 발생하기 힘든 패턴들을 찾아내어, 그것을 증거로 외계 문명의 존재 여부를 가리려는 노력은 줄곧 이어져왔지만 아직까지도 그러한 패턴은 발견되지 않았다. 한국 천문학계의 자존심 김동혁 박사는 국내 기술로 이러... www.acmicpc.net 난이도 : 골드5 정규표현식을 쓰면 빠르게 풀리는 문제이다. 문제에서 설명하고 있는 규칙은 정규표현식과 거의 매칭된다. 심지어 표현식이 주어지고 있으므로, 이를 약간 바꿔서 사용해주기만 하면 된다. 다른 점은, 전체 text에서

Naver Blog

백준 23563번 '벽 타기' 파이썬(Python) / 0-1 bfs, 다익스트라(dijkstra)

https://www.acmicpc.net/problem/23563 23563번: 벽 타기 문제 루시우는 높이가 $H$이고 너비가 $W$인 맵의 시작점에서 끝점까지 이동하려고 한다. 맵은 $H$개의 행과 $W$개의 열로 이루어진 격자판 모양이다. 각 칸은 벽 또는 빈칸이다. 루시우는 상, 하, 좌, 우 방향 인접한 칸으로 한 칸씩 이동할 수 있다. 벽으로는 이동할 수 없다. 루시우가 한 칸을 이동하는 데에는 1초가 걸린다. 하지만 루시우가 벽을 타고 이동 하면 순식간에 (0초의 시간에) 상, 하, 좌, 우 방향 인접한 칸으로 이동할 수 있다. 어떤 빈칸의 상하좌우 중 하나가 벽이면 이 칸은 벽에 인접한 칸 이라고 한다. ... www.acmicpc.net 난이도 : 골드3 소요시간 : 25분 문제 해결 방법 아래 문제에서 몇 가지 구현만 추가해주면 된다. https://blog.naver.com/inpink_/223359589175 백준 1261번 '알고스팟' 파이썬(Python)

Naver Blog

백준 1261번 '알고스팟' 파이썬(Python) / 0-1 bfs (와 다익스트라의 연관성)

https://www.acmicpc.net/problem/1261 1261번: 알고스팟 문제 알고스팟 운영진이 모두 미로에 갇혔다. 미로는 N*M 크기이며, 총 1*1크기의 방으로 이루어져 있다. 미로는 빈 방 또는 벽으로 이루어져 있고, 빈 방은 자유롭게 다닐 수 있지만, 벽은 부수지 않으면 이동할 수 없다. 알고스팟 운영진은 여러명이지만, 항상 모두 같은 방에 있어야 한다. 즉, 여러 명이 다른 방에 있을 수는 없다. 어떤 방에서 이동할 수 있는 방은 상하좌우로 인접한 빈 방이다. 즉, 현재 운영진이 (x, y)에 있을 때, 이동할 수 있는 방은 (x+1, y), (x, y+1), (x-1, y), (x, y-1)... www.acmicpc.net 난이도 : 골드4 소요시간 : 15분 이번 문제는 0-1 bfs 문제이다. 아래 문제를 먼저 풀고 이 문제를 푸는 것을 추천한다. https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 13549

Naver Blog

백준 1238번 '파티' 파이썬(Python) / 플로이드 워셜(floyd-warshall), 다익스트라(dijkstra)

https://www.acmicpc.net/problem/1238 1238번: 파티 1238번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 파티 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 45602 23180 15546 48.483% 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 T i (1 ≤ T i ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서... www.acmicpc.net 난이도 : 골드3 문제 설명 x=2일 때, 위 그림과 같이 모든 정점에서 2로 가는 비용, 2에서 모든 정점으로 가는 비용 계산이 필요한 문제이다. 플로이드 워셜 풀이 n=1000이라 스탠다드 플로이드 워셜로 푼다면 O(1000**3=10

Naver Blog

객체에서 의존하는 객체가 너무 많을 때는 DIP(의존관계 역전 원칙), DI(의존성 주입), IoC Container을 적용하자

목차 서론 절차지향에서 IoC 컨테이너까지 절차지향 대신 MVC 패턴 적용 DIP(의존관계 역전 원칙), DI(의존성 주입) 객체에서 의존하는 다른 객체가 너무 많아지는 문제를 IoC 컨테이너로 해결 파라미터에 들어가는 값이 매번 달라지는 경우에는 Builder 패턴을 고려하기 결론 1. 서론 안녕하세요. 우아한테크코스 BE 6기에 지원한 inpink입니다. 우아한테크코스 1,2주차 미션을 진행하며 함께 나누고싶은 팁이 있어서 글을 작성하게 되었습니다. 2주동안 미션을 구현하며 DIP(의존관계 역전 원칙), DI(의존성 주입), IoC Container를 적용하게된 과정과 유용성을 설명드리도록 하겠습니다! 덤으로 Builder 패턴까지 담아봤습니다! 작성 내용에 대한 의견, 토의, 질문 등 환영합니다! 2. 절차지향에서 IoC 컨테이너까지 ① 절차지향 대신 MVC 패턴 적용 1주차 미션을 처음 시작할 때는 백준 알고리즘 문제를 풀 때처럼 절차지향으로 구현을 했습니다. public

Naver Blog

싱글톤 패턴에 IoC 컨테이너와 LazyHolder를 적용하여 싱글톤의 단점을 최소화

목차 서론 싱글톤 패턴에 IoC 컨테이너와 LazyHolder를 적용하여 싱글톤의 단점을 최소화 싱글톤(Singleton)이란? 싱글톤의 장단점 멀티스레드 환경에서 동시성 문제를 해결하는 싱글톤 기법 3가지 싱글톤 패턴에 IoC 컨테이너와 LazyHolder를 적용하여 싱글톤의 단점을 최소화 결론 1. 서론 안녕하세요. 우아한테크코스 BE 6기에 지원한 inpink입니다. 우아한테크코스 3주차 미션을 진행하며 공부한 내용을 공유하고자 글을 작성했습니다! 이 글은 2주차에 작성한 DIP(의존관계 역전 원칙), DI(의존성 주입), IoC Container 를 적용해준 아래 포스팅에서 이어지는 내용입니다! 객체에서 의존하는 객체가 너무 많을 때는 DIP(의존관계 역전 원칙), DI(의존성 주입), IoC Container을 적용하자 객체에서 의존하는 객체가 너무 많을 때는 DIP(의존관계 역전 원칙), DI(의존성 주입), IoC Container을 적용하자 목차 서론 절차지향에

Naver Blog

우아한테크코스 6기 백엔드 프리코스 회고

안녕하세요. 우아한테크코스 6기 BE에 지원한 inpink입니다! 프리코스를 달려온 여정을 함께 공유해보려고 합니다 :) 멘탈 관리 어떻게 하면 좋을까? 프리코스 초반에는 커뮤니티에 올라온 멋진 글들을 보면서 잘 할 수 있을까..? 난 너무 부족한 거 아닐까? 라는 생각도 들었다. 이 때, 포비와 왼손이 해주신 말씀이 도움이 정말 많이 되었다. https://youtu.be/HJdMl5O4IkQ 지원자들의 마음을 어떻게 이렇게 잘 아시는지 신기했고, 지하철에서 이 댓글을 보고 엄청난 감동과 힘을 받았다. 주최자이신 캡틴, 코치님들이 참가자를 위해 이런 위로의 말씀을 해주실 것이라곤 생각도 못했다. 댓글을 읽으며 나만 이런 생각을 하는 게 아니라는 것을 알게 됐고, 다들 이를 이겨내기 위해 노력한다는 것을 보고 다시 열정을 회복할 수 있었다. 나는 이 질문에 아래와 같이 답하며 나의 방식으로 프리코스를 대했다. 마음먹었다고 바로 행해지는 것은 아니었지만 이 마음가짐을 가지고 프리코스

Naver Blog

[회고] 우아한테크코스 6기 백엔드(BE) 프리코스 이후부터 최종 코딩테스트까지

안녕하세요. 우아한테크코스 6기 BE에 지원한 inpink입니다! 프리코스 이후부터 최종 코딩테스트까지 한 달간의 회고를 작성해보았습니다. (프리코스 한 달간의 회고는 아래 포스팅을 참고해주세요 ) https://blog.naver.com/inpink_/223265929034 우아한테크코스 6기 백엔드 프리코스 회고 안녕하세요. 우아한테크코스 6기 BE에 지원한 inpink입니다! 프리코스를 달려온 여정을 함께 공유해... blog.naver.com 목차 1. 프리코스 이후의 3주 2. 1차 합격 발표 이후의 5일 3. 최종 코딩 테스트 4. 감사의 인사 5. 마무리 쓰다보니 글이 좀 길어졌습니다. 바쁘실 경우 원하시는 챕터로 바로 넘어가서 보시는 것을 추천드립니다 또, 글을 2개로 분리할까 고민하고 있습니다. 네이버는 내부 링크를 지원하라! 1. 프리코스 이후의 3주 프리코스 종료 4주간 달려왔던 프리코스가 11.15 수요일 밤 12시 제출로 종료되었다. 이후로 미뤄뒀던 학교

Naver Blog

NPU(neural processor unit), Neuromorphic chip, Edge AI, 이들의 차이점과 미래 비전

1. 서론 인공지능(Artificial Intelligence)은 수많은 데이터, 수많은 연산을 기반으로 이루어지고 있다. 그리고, 인공지능의 발전은 자연스럽게 AI를 위한 반도체의 개발로 이어지고 있다. 기존의 절차지향 프로그램, 객체지향 프로그램에서는 일반적인 연산을 필요로 하여 CPU(central processing unit, 중앙 처리 장치)를 주로 사용했다. 3D와 다양한 시각적 효과를 표현하기 위해 보다 많은 연산을 요구하는 그래픽 분야에서는 GPU(graphics processing unit, 그래픽 처리 장치)를 주로 사용했다. 이제는, GPU의 성능을 전반적으로 훨씬 능가하는 AI Device들이 빠른 속도로 개발되고 상용화되고 있다. AI Device의 대표적인 특징은 다음과 같다. 1초에 몇 천조 단위의 연산이 가능하다. 기존 GPU와 비교하여 크기가 매우 작고, 소비 전력이 적고, 가격이 저렴하다. 또, AI 연산을 더 효율적이게 하기 위해 신경망 형태를 갖추

Naver Blog

백준 11576번 'Base Conversion' 자바(JAVA)

https://www.acmicpc.net/problem/11576 11576번: Base Conversion 11576번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 Base Conversion 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 9597 5336 4535 56.196% 문제 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 세계에서도 프로그래밍을 하고 싶었던 정이는 백준 사이트에 접속하여 문제를 풀기로 하였다. 그러나 미래세계는 A진법을 사... www.acmicpc.net 난이도 : 실버5 소요시간 : 25분 [문제 해결 알고리즘] 수학, 구현, 정수론 문제이다. 실제로 A진수를 B진수로 구현하는 방법을 생각하고, 이를 직접 코드로 구현해주면 된다. 1) A진수를 10진수로 변환

Naver Blog

백준 1212번 '8진수 2진수' 자바(JAVA)

https://www.acmicpc.net/problem/1212 1212번: 8진수 2진수 1212번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 8진수 2진수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 41619 14011 11589 35.833% 문제 8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오. 입력 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다. 출력 첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다. 예제 입력 1 복사 314 예제 출력 1 복사 1100... www.acmicpc.net 난이도 : 브론즈2 소요시간 : 20분 [문제 해결 알고리즘] 8진수를 2진수로 변환하는 문제이다. 8진수의 길이가 333,334개로 매우 길다. Integer를 쓴다면 범위 초과이다. 8진수 한 자리는 2진수 3자리로 나타낼 수

Naver Blog

[프로그래머스 LV 2.] '수식 최대화' 파이썬(Python)

코딩테스트 연습 - 수식 최대화 | 프로그래머스 스쿨 (programmers.co.kr) 난이도 : LV 2 [문제 해결 알고리즘] 파이썬을 이용하여 구현했다면 그나마 구현 시간이 빨랐을 것이며, 그렇지 않고 직접 다 구현해줘야 하는 언어일수록 구현 난이도와 시간이 매우 높아졌을 문제 공통점 길이가 매우 짧다. 연산자가 3개이다 3개의 연산자에 대해 순열을 만들어서 써야 한다.(직접 만들어주거나, permutation 이용) 이 중, 절대값이 가장 큰 값을 반환한다. 구현 방법 1. 재귀를 이용한 방법 => 우선순위가 낮은 연산자부터 잘라서, 잘린 결과를 재귀로 보낸다. 3번째 재귀에서 계산하여 반환한다. 받은 값을 이용하여 2번째 재귀에서 계산하여 반환한다. 1번째 재귀도 마찬가지이다. eval()을 이용한다. string으로 되어 있는 계산식을 계산해주는 함수이다. 2. 완전 탐색 => for을 이용해서 하나하나 접근하며 직접 연산식을 잘라주는 과정이 필요하다. 우선 순위의 연산

Naver Blog

백준 1254번 '팰린드롬 만들기' 자바(JAVA) / 문자열, brute force, two pointer

https://www.acmicpc.net/problem/1254 1254번: 팰린드롬 만들기 1254번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 팰린드롬 만들기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 8975 3904 3260 45.177% 문제 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다.... www.acmicpc.net 난이도 : 실버2 소요시간 : 1시간 [문제 해결 알고리즘] brute force, two pointer, 문자열 문제이다. 길이가 50밖에 안된다. 괜히 규칙을 찾으려고 하면 시간만 오래 걸리고, 틀리는 문제이다. => bru

Naver Blog

백준 1543번 '문서 검색' 파이썬(Python) /문자열, brute force

https://www.acmicpc.net/problem/1543 1543번: 문서 검색 문제 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다. 세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문서... www.acmicpc.net 난이도 : 실버4 소요시간 : 25분 [문제 해결 알고리즘] 앞에서 일치하는 문자가 나왔으면 바로 체크를 해주는 것이 가장 많이 셀 수 있다. (Greedy) 일치하지 않은 문자가 나왔을 때, 단순히 다음 문자부터 다시 검사하게 되면

Naver Blog

[프로그래머스 LV 2.] '전력망을 둘로 나누기' 파이썬(Python) / union find, brute force

https://school.programmers.co.kr/learn/courses/30/lessons/86971 코딩테스트 연습 - 전력망을 둘로 나누기 n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다. 송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 2 이상 100... school.programmers.co.kr 난이도 : LV 2 소요시간 : 15분 [문제 해결 알고리즘] 문제를 보자마자, 같은 그룹에 속하는지 세기 위해 union-find 를 쓰면 된다고 알

Naver Blog

백준 3932번 'Unreliable Messengers' 자바(JAVA) /구현, 문자열

https://www.acmicpc.net/problem/3932 3932번: Unreliable Messengers 문제 The King of a little Kingdom on a little island in the Pacific Ocean frequently has childish ideas. One day he said, “You shall make use of a message relaying game when you inform me of something.” In response to the King’s statement, six servants were selected as messengers whose names were Mr. ... www.acmicpc.net 난이도 : 실버2 소요시간 : 40분 [문제 해결 알고리즘] 원본 문자열 -> 거쳐간 사람(AJMP, E, AM 등) -> 바뀐문자열(aB23d, 86AE, 6 등) 원본 문자열을 찾아 출력하는 문제이다.

Naver Blog

[프로그래머스 LV 2.] '배달' 파이썬(Python) /다익스트라(Dijkstra), BFS

https://school.programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 ... school.programmers.co.kr 난이도 : LV 2 소요시간 : 18분 [문제 해결 알고리즘] 익숙하게 많이 본 문제이다. "다익스트라"+"BFS" 문제이다. "출발점이 고정"되어있기 때문에, "다익

Naver Blog

백준 1976번 '여행 가자' 자바(JAVA) /union-find

https://www.acmicpc.net/problem/1976 1976번: 여행 가자 1976번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 여행 가자 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 34308 13158 9659 37.040% 문제 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, ... www.acmicpc.net 난이도 : 골드4 소요시간 : 20분 [문제 해결 알고리즘] 마지막 줄에 입력되는 도시들을(1,2,3), 어떻게 거쳐가든 상관없다. "단순히 같이 연결되어 있는지(=같은 집합인지)"를 묻는 것이므로, union-find 문제이다. f

Naver Blog

백준 5081번 'Constellations' 자바(JAVA) /union-find, brute force

https://www.acmicpc.net/problem/5081 5081번: Constellations 문제 One night, while camping out in the wide open spaces, Big Ed was looking at the stars. Now Ed never bothered to learn his constellations, but decided that grouping the stars was a reasonable thing to do after all. But Big Ed was going to do it in a sensible manner. He decided on the following sim... www.acmicpc.net 난이도 : 골드5 소요시간 : 25분 [문제 해결 알고리즘] 각 별자리에 대해 (x,y)좌표가 주어진다. 각 별자리에서 "가장 가까운 별자리들"은 같은 집합이 된다. 별자리 사이의 거리를 세는 방법은 다음과 같이 x,

Naver Blog

[프로그래머스 LV 2.] '점 찍기' 파이썬(Python)

https://school.programmers.co.kr/learn/courses/30/lessons/140107 코딩테스트 연습 - 점 찍기 좌표평면을 좋아하는 진수는 x축과 y축이 직교하는 2차원 좌표평면에 점을 찍으면서 놀고 있습니다. 진수는 두 양의 정수 k , d 가 주어질 때 다음과 같이 점을 찍으려 합니다. 원점(0, 0)으로부터 x축 방향으로 a*k (a = 0, 1, 2, 3 ...), y축 방향으로 b*k (b = 0, 1, 2, 3 ...)만큼 떨어진 위치에 점을 찍습니다. 원점과 거리가 d 를 넘는 위치에는 점을 찍지 않습니다. 예를 들어, k 가 2, d 가 4인 경우에는 (0, 0), (0, 2), (0, 4), (2, 0), (2, 2), (4,... school.programmers.co.kr 난이도 : LV 2 소요시간 : 10분 [문제 해결 알고리즘] 수학 문제입니다. 공식을 만들어내면 됩니다. x 기준으로 한 줄씩 세어줬습니다. 공식 : (math

Naver Blog

백준 4143번 'Bridges and Tunnels' 자바(JAVA) /union-find

https://www.acmicpc.net/problem/4143 4143번: Bridges and Tunnels 4143번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 Bridges and Tunnels 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 3 초 128 MB 66 35 26 52.000% 문제 Some days, the university campus gets very wet. Other days, it can get very cold. Although many times, it is pleasant to be outside, there are days when we would prefer to sta... www.acmicpc.net 난이도 : 골드4 [문제 해결 알고리즘] Waterloo's local Programming Contests 中 24 September, 2011 A번 문제이다. union-find 문제이다. union-fi

Naver Blog

백준 17250번 '은하철도' 자바(JAVA) /union-find

https://www.acmicpc.net/problem/17250 17250번: 은하철도 문제 하나의 은하 안에는 여러 행성들이 존재한다. 문명의 기술 발전으로 은하 내의 모든 행성들은 서로 여행할 수 있게 되었다. 드디어 오늘, 80,000 광년 떨어진 다른 은하와 우리 은하를 연결하는 은하 철도가 개통된다. 은하 철도가 개통되면 더 많은 행성을 여행할 수 있다는 사실에 은하 내 모든 행성의 주민들은 들떠있는 분위기이다. 우주철도공사 G-Express는 앞으로의 은하 철도 계획을 발표하였다. 우주는 너무 넓기 때문에, G-Express사는 은하가 연결될 때마다 몇 개의 행성들이 서로 여행할 수 있게 되었는 지를 알려주... www.acmicpc.net 난이도 : 골드4 소요시간 : 2분 [문제 해결 알고리즘] union-find 문제이다. 아래 문제와 거의 유사하다! 이 문제에 맞게끔 약간만 변형시켜주면 된다. https://blog.naver.com/willyouspeedup/

Naver Blog

[프로그래머스 LV 2.] '가장 큰 정사각형 찾기' 자바(JAVA) /DP

https://school.programmers.co.kr/learn/courses/30/lessons/12905 코딩테스트 연습 - 가장 큰 정사각형 찾기 1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.) 예를 들어 1 2 3 4 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 가 있다면 가장 큰 정사각형은 1 2 3 4 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다. 제한사항 표(board)는 ... school.programmers.co.kr 난이도 : LV 2 [문제 해결 알고리즘] dp 문제이다. "점화식"만 찾아낸다면, 구현은 어렵지 않다. 점화식은 다음과 같다. board[i][j]

Naver Blog

[프로그래머스 LV 2.] '시소 짝꿍' 파이썬(Python)

https://school.programmers.co.kr/learn/courses/30/lessons/152996# 코딩테스트 연습 - 시소 짝꿍 어느 공원 놀이터에는 시소가 하나 설치되어 있습니다. 이 시소는 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 하나씩 있습니다. 이 시소를 두 명이 마주 보고 탄다고 할 때, 시소가 평형인 상태에서 각각에 의해 시소에 걸리는 토크의 크기가 서로 상쇄되어 완전한 균형을 이룰 수 있다면 그 두 사람을 시소 짝꿍이라고 합니다. 즉, 탑승한 사람의 무게와 시소 축과 좌석 간의 거리의 곱이 양쪽 다 같다면 시소 짝꿍이라고 할 수 있습니다. 사람들의 몸무게 목록 weights 이 주어질 때, 시소 짝꿍이 몇 쌍 존재하는지 구... school.programmers.co.kr 난이도 : LV 2 소요시간 : 15분 [문제 해결 알고리즘] map + 수학 문제이다. "num:개수(count)" 형태로 map을 만들어준다. 예) 문제의

Naver Blog

백준 4485번 '녹색 옷 입은 애가 젤다지?' 자바(JAVA) /다익스트라(데이크스트라, dijkstra)

https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 문제 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주인공, 링크는 지금 도둑루피만 가득한 N x N 크기의 동굴의 제일 왼쪽 위에 있다. [0][0]번 칸이기도 하다. 왜 이런 곳에 들어왔냐고 묻는다면 밖에서 사람들이 자꾸 "젤다의 전설에 나오는 녹색 애가 젤다지?"라고 물어봤기 때문이다. 링크가 녹색 옷을 입은 주인공이고 젤다는 그냥 잡혀있는 공주인데, 게임 타이틀에 젤다가 나와있다고 ... www.acmicpc.net 난이도 : 골드4 소요시간 : 30분 [문제 해결 알고리즘] 다익스트라 문제이다. 다익스트라 기본 문제는 백준에서 G5이다. 이 문제는, 2차원 배열에 dijkstra를 써야한다는 걸 깨달아야 했기 때문에 G4로 적

Naver Blog

백준 5944번 'Apple Delivery' 자바(JAVA) /다익스트라(데이크스트라, dijkstra)

https://www.acmicpc.net/problem/5944 5944번: Apple Delivery 문제 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she travels the C (1 <= C <= 200,000) cowpaths which are arranged as the usual graph which connects P (1 <= P <= 100,000) pastures conveniently numbered from 1..P: no cowpath leads from a pasture to itself, c... www.acmicpc.net 난이도 : 골드4 소요시간 : 17분 [문제 해결 알고리즘] 다익스트라 문제이다. 다익스트라 기본 문제는 백준에서 G5이다. 이 문제는, dijkstra를 2번 써야 했기 때문에 G4로 적절히 레이팅이 되었다 생각한다

Naver Blog

[도서] 컴퓨터 네트워킹 하향식 접근 5장 - '과제와 질문' 풀이

저작권을 위해 문제는 적지 않았습니다! # 과제와 질문 394p~ R1. 라우팅 알고리즘이 각 라우터에서 실행됨을 의미한다.  하나의 각 라우터에는 제어 평면(라우팅 알고리즘, 소프트웨어)과 데이터 평면(포워딩, 하드웨어) 두 개가 들어있다.  각 라우터가 자체 제어 및 데이터 평면을 구현하는 독립적인 엔티티로 작동하기 때문에 네트워크 제어 및 데이터 평면이 단일하게 구현된다고 말한다.    R2. 논리적으로 중앙 집중화된 제어란 논리적으로 중앙 집중화된 라우팅 컨트롤러가 각 라우터에서 사용할 포워딩 테이블을 계산하고 배포하는 것을 의미하며, 각 라우터는 라우터별 제어와 달리 포워딩 테이블을 계산하지 않는다.  논리적으로 중앙 집중식 제어의 경우, 데이터 평면과 제어 평면은 별도의 장치에 구현된다. 제어 평면은 중앙 서버 또는 여러 서버에 구현되고 데이터 평면은 각 라우터에 구현된다.    R3. 중앙 집중형 라우팅 알고리즘 : 네트워크 전체에 대한 완전한 정보를 가지고 있어야 함.

Naver Blog

백준 1043번 '거짓말' 자바(JAVA) /Union-Find

https://www.acmicpc.net/problem/1043 1043번: 거짓말 문제 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 과장해서 말한다. 당연히 과장해서 이야기하는 것이 훨씬 더 재미있기 때문에, 되도록이면 과장해서 이야기하려고 한다. 하지만, 지민이는 거짓말쟁이로 알려지기는 싫어한다. 문제는 몇몇 사람들은 그 이야기의 진실을 안다는 것이다. 따라서 이런 사람들이 파티에 왔을 때는, 지민이는 진실을 이야기할 수 밖에 없다. 당연히, 어떤 사람이 어떤 파티에서는... www.acmicpc.net 난이도 : 골드4 소요시간 : 30분 [문제 해결 알고리즘] Union-Find 문제이다. Union-Find 알고리즘은 아래 포스팅에 설명해두었다. 중복되는 내용은 설명하지 않겠다. https://blog.naver.com/willyo

Naver Blog

[Spring] WAS와 웹 서버 차이, 톰캣(WAS)와 아파치(Web Server) 차이, HTTP와 TCP/IP 차이, 웹 소켓과 웹 서버 차이

서론 Spring으로 웹 개발을 하다보면 관련된 다양한 용어들이 등장한다. WAS, 웹 서버, 아파치, (아파치) 톰캣, HTTP, TCP, 소켓 등... 네트워크를 공부하고, Spring에서 사용하는 용어 중 헷갈리기 쉬운 내용들을 정리해보았다. 목차는 다음과 같다. 1. WAS와 웹 서버 차이 2. 서블릿이란? WAS에서 서블릿을 어떻게 쓰는가? 3. 톰캣(WAS)와 아파치(Web Server) 차이 4. HTTP와 TCP/IP 차이 5. 웹 소켓과 웹 서버 차이 1. WAS와 웹 서버 차이 "웹 서버"는, 클라이언트가 서버에 보내는 요청을 받아 처리하고, 클라이언트로 필요한 데이터를 보내주는 역할을 하는, 말 그대로 웹을 위한 "서버"이다. "WAS"는 Web Application Server이다. 쉽게 설명하면, WAS는 웹 서버 + 웹 컨테이너(서블릿 컨테이너) 이다. 스프링에서도 스프링의 다양한 기능을 담고 있는 스프링 컨테이너를 지원하는 것처럼, WAS도 웹 컨테이너(서

Naver Blog

백준 24267번 '알고리즘 수업 - 알고리즘의 수행 시간 6' 자바(JAVA) / 수학

https://www.acmicpc.net/problem/24267 24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6 24267번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 알고리즘 수업 - 알고리즘의 수행 시간 6 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 512 MB 7417 3767 3554 52.257% 문제 오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n 이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자. MenOfPassion 알고리즘은 다음과 같다. MenO... www.acmicpc.net 난이도 : 브론즈2 소요시간 : 6분 [문제 해결 알고리즘] 실행 횟수는, n(n-1)(n-2)/6 이다. 이 식은, nC3으로부터 나왔다. 그 이유는 아래 사진을 참고하자. 직접 모든 경우를 구해

Naver Blog

[2023 KAKAO BLIND RECRUITMENT] '이모티콘 할인행사' 파이썬(Python) /순열, 구현

https://school.programmers.co.kr/learn/courses/30/lessons/150368 코딩테스트 연습 - 이모티콘 할인행사 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것. 이모티콘 판매액을 최대한 늘리는 것. 1번 목표가 우선이며, 2번 목표가 그 다음입니다. 이모티콘 할인 행사는 다음과 같은 방식으로 진행됩니다. n 명의 카카오톡 사용자들에게 이모티콘 m 개를 할인하여 판매합니다. 이모티콘마다 할인율은 다를 수 있으며, 할인율은 10%, 20%, 30%, 40% 중 하나로 설정됩니다. 카카오톡 사용자들은 다음과 같은 기준을 따라 이모티콘을 사거나, 이모티콘 플러스 서비스에 가입합니다. 각 사용자들은 자신의 기준에 따라 일정 비율 이상 할인하는 이모... school.programmers.co.kr 난이도 : LV 2 소요시간 : 50분 [문제 해결 알고리즘] 카카오 2023년 신입 블라인드 공채 1차 코테 3번 문제이다. 이번 코테는 특수한 자료구

Naver Blog

백준 13244번 'Tree' 자바(JAVA) /Union-Find

https://www.acmicpc.net/problem/13244 13244번: Tree 문제 One of the most important data structures in computer science is the tree. You already dealt with binary trees in the qualification round. This problem is about general trees. Trees are the subset of graphs that have the following 3 properties: It is connected: for every node you can reach every ... www.acmicpc.net 난이도 : 골드4 소요시간 : 30분 [문제 해결 알고리즘] 그래프&트리 차이점을 익히고, Union-Find를 사용하는 문제입니다. (사용 이유는 아래서 설명) Union-Find에 대한 내용은 아래 포스팅에 자세히 설명해두었습니

Naver Blog

백준 1969번 'DNA' 자바(JAVA) / 구현, 문자열, brute force

https://www.acmicpc.net/problem/1969 1969번: DNA 문제 DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오티드의 첫글자를 따서 표현한다. 만약에 Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-Cytosine-Cytosine-Guanine-Adenine-Thymine로 이루어진 DNA가 있다고 하면, “TAACTGCCGAT”로 표현할 수 있다. 그리고 H... www.acmicpc.net 난이도 : 실버4 소요시간 : 20분 [ 문제 해결 알고리즘 ] 1) 문자열DNA 정하기 각 문자에서 올 수 있는 것은 A,C,G,T 4가지 중 하나이다. 모든 열을 대상으로 검사한다. 각 '열'에서 가장 많은 개수로 선택하면 됨. 아래

Naver Blog

백준 1373번 '2진수 8진수' 자바(JAVA)

https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 1373번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 2진수 8진수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 30046 11819 9725 40.980% 문제 2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오. 입력 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 주어진 수를 8진수로 변환하여 출력한다. 예제 입력 1 복사 11001100 예제 출력 1 복사 314 출처 문제를 만든 사람: author5 데이터... www.acmicpc.net 난이도 : 브론즈1 소요시간 : 16분 [문제 해결 알고리즘] 문자의 길이가 최대 100만이다. 어마어마하게 큰 숫자로, O(len(n))으로 풀어야지, O(n)에 근접하기라도 하면 시간초과이다. 2진수를 8진수로 만드는 방법은 아

Naver Blog

백준 5052번 '전화번호 목록' 자바(JAVA) /Trie 트리 자료구조

https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 문제 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 걸리기 때문이다. 따라서, 이 목록은 일관성이 없는 목록이다. 입력 첫째 줄에 ... www.acmicpc.net 난이도 : 골드4 소요시간 : 75분 새롭게 "Trie 트리 자료구조"에 대해 배웠다. [문제 해결 알고리즘] (오답) 완전탐색 시 O(50*10000*10000*10)으로 시간초과 (모든 문자열이 탐색 후보, 대상이 됨) (

Naver Blog

백준 14725번 '개미굴' 자바(JAVA) /Trie 트리 자료구조

https://www.acmicpc.net/problem/14725 14725번: 개미굴 문제 개미는(뚠뚠) 오늘도(뚠뚠) 열심히(뚠뚠) 일을 하네. 개미는 아무말도 하지 않지만 땀을 뻘뻘 흘리면서 매일 매일을 살길 위해서 열심히 일을 하네. 한 치 앞도(뚠뚠) 모르는(뚠뚠) 험한 이 세상(뚠뚠) 그렇지만(뚠뚠) 오늘도 행복한 개미들! 우리의 천재 공학자 윤수는 이 개미들이 왜 행복한지 궁금해졌다. 행복의 비결이 개미가 사는 개미굴에 있다고 생각한 윤수는 개미굴의 구조를 알아보기 위해 로봇 개미를 만들었다. 로봇 개미는 센서가 있어 개미굴의 각 층에 먹이가 있는 방을 따라 내려가다 더 이상 내려갈 수 없으면 그 자리에서... www.acmicpc.net 난이도 : 골드3 소요시간 : 25분 [문제 해결 알고리즘] Trie 트리 자료구조를 이용하는 문제이다. 이 자료구조에 관한 내용은 아래 포스팅에 자세히 설명해두었다! 중복되는 내용은 설명하지 않겠다. https://blog.nave

Naver Blog

백준 16934번 '게임 닉네임' 자바(JAVA)/Trie 트리 자료구조

https://www.acmicpc.net/problem/16934 16934번: 게임 닉네임 문제 스타트링크에서 매우 재미있는 게임을 만들었다. 이 게임은 정말 재미있다. 게임에는 유저가 접속하는 기능이 있고, 각 유저는 가입할 때, 자신의 닉네임을 정해야 한다. 닉네임은 알파벳 소문자로만 이루어져 있고, 두 유저가 같은 닉네임을 정하는 것도 가능하다. 이 게임은 유저의 닉네임을 이용해서 내부에 저장할 별칭을 만든다. 별칭은 유저에게 보여지지는 않고, 내부에서만 사용된다. 저장 공간을 최소로 하기 위해서 별칭의 길이를 최소로 하려고 한다. 별칭은 유저 닉네임의 접두사(Prefix) 중에서 가장 길이가 짧은 것을 사용한다. ... www.acmicpc.net 난이도 : 골드3 소요시간 : 20분 [문제 해결 알고리즘] HashMap을 이용해서도 풀 수 있고, Trie 트리를 이용해서도 풀 수 있다. 나는 Trie 트리로 푼 풀이를 설명하겠다. Trie 트리에 대한 기본적인 내용은 아

Naver Blog

WebMvcConfigurer를 이용하여 Validation 객체를 @Validated로 사용하는 방법,과정 분석 & WebMvcConfigurerAdapter deprecated

주제 1. WebMvcConfigurer interface를 이용하여 Validation interface의 객체를 @Validated로 사용하기. 유기적인 과정 분석 2. WebMvcConfigurerAdapter deprecated된 이유 목차 1. WebMvcConfigurer, Validation, @Validated 설명 2. 주제 해결 2-1. 꼭 @SpringBootApplication에서 WebMvcConfigurer를 implements하여 getValidator()를 구현해줘야하는걸까? 2-2. WebMvcConfigurer, Validation, @Validated의 유기적 작동 과정을 알아보자. abstract WebMvcConfigurerAdapter class가 deprecated된 이유도 알아보자 1. WebMvcConfigurer, Validation, @Validated 설명 아래 영한님의 강의에서 WebMvcConfigurer의 사용 방법을 간략하게

Naver Blog

백준 17609번 '회문' 자바(JAVA) /문자열, 재귀, 투 포인터

https://www.acmicpc.net/problem/17609 17609번: 회문 17609번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 회문 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 (추가 시간 없음) 512 MB 21442 5830 4287 28.641% 문제 회문(回文) 또는 팰린드롬(palindrome)은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. 예를 들어 ‘abba’ ‘kayak’, ‘reviver’, ‘madam’은 모두 회문이다. 만일 그 자체는 회문이 아니지만 한 문자를 삭제하여 회문으로 만들 수 있는 문자열이라면 우리는 이런 문자열을... www.acmicpc.net 난이도 : 골드5 소요시간 : 15분 [문제 해결 알고리즘] palindrome method는 << 1. 팰린드롬인지 2. 유사 팰린드롬인지 3. 둘다 아닌지 >> 판단한다. 재귀를 이용했다. 판단할 문자열 s와, 재귀 깊이 depth

Naver Blog

Spring Boot에서 HttpSession을 이용하여 세션 쿠키를 생성하는 방법(HttpServletRequest이용 이유, 세션 id 생성, getSession() 등)

주제 Spring Boot에서 HttpSession을 이용하여 세션 쿠키를 생성하는 방법(HttpServletRequest이용 이유, 세션 id 생성 방법, getSession(), @SessionAttribute, 각 interface의 구현체 등) 포스팅 작성 동기 https://blog.naver.com/willyouspeedup/223179676673 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술_로그인 처리1 - 쿠키, 세션 출처 및 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard ... blog.naver.com 위 강의에서 HttpSession과 관련하여 궁금한 부분이 많이 생겼다. 관련하여 파고 들어가다보니 포스팅을 분리해야 할 정도의 분량이 나와서 따로 작성해보기로 한다. DI되는 구현체 확인 방법 스프링 부트는 의존성 주입(Dependency Injection)을

Naver Blog

백준 9461번 '파도반 수열' 파이썬(Python) /수학, 다이나믹 프로그래밍(DP)

https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 9461번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 파도반 수열 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 70364 30727 25150 42.310% 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1... www.acmicpc.net 난이도 : 실버3 소요시간 : 15분 1) 모든 삼각형은 위를 보거나/아래를 보거나 두 가지이다. 그리고 잘 보면, 3이 적혀있는 삼각형부터는 모두 숫자 2개의 합으로 이루어져 있다는 것이 보인다. 그리고, 위를 보는 삼각형은 아래

Naver Blog

백준 2477 '참외밭' 파이썬

https://www.acmicpc.net/problem/2477 2477번: 참외밭 문제 시골에 있는 태양이의 삼촌 댁에는 커다란 참외밭이 있다. 문득 태양이는 이 밭에서 자라는 참외가 도대체 몇 개나 되는지 궁금해졌다. 어떻게 알아낼 수 있는지 골똘히 생각하다가 드디어 좋은 아이디어가 떠올랐다. 유레카! 1m 2 의 넓이에 자라는 참외 개수를 헤아린 다음, 참외밭의 넓이를 구하면 비례식을 이용하여 참외의 총개수를 구할 수 있다. 1m 2 의 넓이에 자라는 참외의 개수는 헤아렸고, 이제 참외밭의 넓이만 구하면 된다. 참외밭은 ㄱ-자 모양이거나 ㄱ-자를 90도, 180도, 270도 회전한 모양(, , 모양)의... www.acmicpc.net 큰 직사각형의 넓이(whole) 큰 직사각형 안에 있는 작은 직사각형의 넓이(part) 이 두가지만 구하면 되는 문제이다. whole의 경우 쉽게 구해진다. 다만 part을 구하는 과정에서 조금 헤매었던 듯. 처음으로 생각했던 틀린 알고리즘

Naver Blog

C언어 자료구조 단순연결리스트 오름차순 정렬 SortedList 중첩 for문으로 구현하기

C언어로 쉽게 풀어쓴 자료구조 저자 천인국, 공용해, 하상호 출판 생능출판 발매 2019.02.22. C언어로 쉽게 풀어쓴 자료구조 단순연결리스트로 오름차순 정렬 만들기 head = SortedList(head); 로 함수를 불러와 사용하면 된다. 중첩 for문을 이용해, 모든 수를 하나하나 비교하는 방식으로 구현하였다. ListNode* SortedList(ListNode* head) { int a; for (ListNode* p = head; p != NULL; p = p->link) { for (ListNode* j = p; j != NULL; j = j->link) { //printf("%d %d\n", p->data, j->data); if (p->data > j->data) { a = j->data; j->data = p->data; p->data = a; } } } return head; } 코드 전문 (C언어로 쉽게 풀어쓴 자료구조 도서 참고하시길) #include <

Naver Blog

Unity3D에서 Drag를 이용하지 않고 공기저항력 조절하기 / 공기저항력이란?

Unity3D에서는 'Drag'와 'angular Drag'라는 기능이 있다. Drag : 물체에 대한 공기저항력 angular Drag : 물체의 회전에 대한 공기저항력 공기저항력이란? 공기저항력에 대해 쉽게 설명하고 있는 게시글을 퍼왔다. 칸 아카데미에서 학업을 위해 제공해주는 질 높은 자료이다. 출처 : https://ko.khanacademy.org/computing/computer-programming/programming-natural-simulations/programming-forces/a/air-and-fluid-resistance 공기 및 유체 저항 (개념 이해하기) | 힘 | Khan Academy ko.khanacademy.org 공기저항력을 이해하려면 비행기를 떠올리면 된다. 비행기가 공중에서 앞으로 나아가려고 할 때 나아가는 방향의 반대 방향으로 '공기저항력'이 작용하여 속도를 느려지게, 앞으로 나아가는 것이 힘들게 한다. '공기저항력 = 공중에서의 마찰력'

Naver Blog

백준 1939번 '중량 제한' 파이썬(Python) / dijkstra

https://www.acmicpc.net/problem/1939 1939번: 중량제한 1939번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 중량제한 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 35726 9774 6026 25.766% 문제 N(2 ≤ N ≤ 10,000)개의 섬으로 이루어진 나라가 있다. 이들 중 몇 개의 섬 사이에는 다리가 설치되어 있어서 차들이 다닐 수 있다. 영식 중공업에서는 두 개의 섬에 공장을 세워 두고 물품을 생산하는 일을 하고 있다. 물품을 생산하다 보면 공장에서 다른 공장으로 생산 중이던 물품을 수송해야 할 일이 생기곤 한다. 그런데... www.acmicpc.net 난이도 : 골드3 문제 요약 1~n번 노드가 있을 때, start 노드에서 end 노드까지 "거치는 경로 중 최소 가중치가 가장 큰 값" 을 구하는 문제 거치는 모든 경로들의 합이 최대가 되는 걸 구하는 게 아님을 주의하자. 이런 경우

Naver Blog

백준 4195번 '친구 네트워크' 파이썬(Python) /분리 집합, Union-Find, Hash

https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 4195번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 친구 네트워크 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 3 초 256 MB 45941 12893 8036 26.512% 문제 민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다. 어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오. 친구 네트워크란 친구 관... www.acmicpc.net 난이도 : 골드2 소요시간 : 1시간 20분 문제 해결 방법 분리 집합 : 분리된 집합들 Union-Find : 분리된 집합 간의 합집합(Union)과 특정 원소가 속한 집합을 찾는(Find) 연산 Hash: Union-Find를

Naver Blog

Ubuntu의 CPU 코어 개수가 Windows의 2배인 이유 - 하이퍼스레딩(HyperThreading)

서론 MySQL 사용을 위해 Windows에서 WSL2를 설치하여, 내부 Ubunut(Linux Server)를 이용하고 있다. (아래 포스팅 참고) https://blog.naver.com/willyouspeedup/223219016939 Windows에서 WSL 2이용하여 Ubuntu, mysql 8.0 설치하는 최신 방법 # MySQL 서버 설치 > 설치 환경 필자는 Windows 환경에서 WSL(Windows Subsystem for Linux)... blog.naver.com 이 때 스레드 풀에 대해 공부하다가, 내 Windows와 Ubuntu의 CPU 코어 개수에 대해 궁금증이 생겼다. Windows의 CPU 코어 개수와, Ubuntu의 CPU 코어 개수가 다른 것이다. 심지어 Windows의 내부에서 동작하는 Ubuntu의 CPU 코어 개수가 2배나 많았다. 이 부분에 대해 학습하여 정리하였다. CPU 코어 개수 CPU 코어 개수는,  컴퓨터의 중앙 처리 장치인 CPU(

1