Backend Development 74

[코테/Java] Hash | 프로그래머스 Lv1. 두 개 뽑아서 더하기

투포인터 학습 흐름 만난 문제지만, 실제로는 TreeSet으로 풀었다. "중복 제거 + 정렬"을 동시에 해결하는 방법을 고민하다가 TreeSet을 처음 알게 됐다.1. 문제 분석 문제 요약정수 배열 numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를, 오름차순으로 정렬된 배열로 반환한다. 핵심 요구사항중복 제거 — 같은 합이 여러 조합으로 나와도 한 번만오름차순 정렬 — 최종 결과는 정렬된 상태2. 풀이 과정1차 의사코드1. numbers 오름차순 정렬2. 이중 for문을 돌면서 두 수의 합을 hashset에 넣는다.3. 다시 한번 sort해서 return 한다. 막혔던 포인트 ① - 원본 배열 정렬이 필요한가?처음엔 numbers 자체를 미리 정렬해야 한다고 ..

[코테/Java] 투포인터 문제 풀이 | 푸드 파이트 만들기 (프로그래머스 Level 1)

1. 문제 분석 문제 요약대회에 참가하는 모든 사람은 두 팀(선수 / 관중)으로 나뉘는데, 각 선수는 자신이 먹을 음식의 종류와 양이 같아야 한다. 정수 배열 food가 주어질 때, 양쪽 선수가 사이좋게 나눠 먹을 수 있는 음식의 순서를 문자열로 반환한다. 입출력 예시food = [1, 3, 4, 6] → "12233330333221" 핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"양쪽이 같은 양을 먹어야 한다"좌우 대칭 구조"정렬된 구간에서 양쪽으로 채워나가기"투포인터 사고방식 투포인터 자체를 직접 쓰는 문제는 아니었지만,"왼쪽과 오른쪽이 대칭"이라는 점에서 투포인터를 배울 때의 사고방식(양 끝에서 좁혀가며 채운다)과 닿아있었다.2. 풀이 과정1차 의사코드food를 마지막 인덱스부터 1번 인덱스까..

StringBuilder를 써야 하는 이유와 자주 쓰는 메서드 정리

1. 필요한 이유String은 불변(immutable) 객체다. answer += "1"처럼 문자열을 더하면, 사실은 기존 값을 복사해서 새로운 String 객체를 만드는 거다.String answer = "";for (int i = 0; i 이걸 반복하면 매번 점점 길어지는 문자열을 복사하느라 전체 시간이 O(n²)까지 늘어날 수 있다. StringBuilder는 가변(mutable) 객체라서, 내부 버퍼에 직접 추가만 한다.복사가 필요 없어서 훨씬 빠르다.2. 사용하는 경우문자열을 반복적으로 이어 붙여야 할 때 (for문, while문 안에서 문자열 누적)문자열을 거꾸로 뒤집어야 할 때문자열의 특정 부분을 수정/삭제/삽입해야 할 때최종적으로 String 하나를 "조립"해서 반환해야 할 때3. 핵심 ..

[코테/Java] 정렬 문제풀이 | H-index (프로그래머스 Level 2)

1. 문제 분석H-Index 정의H-Index는 과학자의 생산성과 영향력을 나타내는 지표다.어떤 과학자가 발표한 논문 n편 중,h번 이상 인용된 논문이 h편 이상이고나머지 논문이 h번 이하 인용되었다면h의 최댓값이 이 과학자의 H-Index다.정의가 처음에는 헷갈렸는데, 예시로 풀어보면 명확해진다. 입출력 예시citations = [3, 0, 6, 1, 5] → 35편의 논문 중 3편이 3회 이상 인용되었다.그래서 H-Index는 3이다. 핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"h번 이상 인용된 논문이 h편 이상"정렬 후 조건 탐색2. 풀이 과정왜 뒤에서부터 순회해야 하는가배열을 오름차순 정렬하면, 뒤에서 몇 번째인지가 "몇 편 이상 인용됐는지"와 자연스럽게 연결된다.[0, 1, 3, 5, ..

SOAP vs REST: 표준화의 역설과 웹 생태계가 REST를 선택한 이유

핵심 개념 한 줄 정의용어정의프로토콜통신할 때 양쪽이 지켜야 하는 규칙의 집합인프라서비스가 돌아가기 위한 물리적/가상적 기반 자원 (서버, DB, CDN 등)벤더소프트웨어/하드웨어를 만들어 파는 회사 (Microsoft, IBM, Oracle 등)서드파티API를 만든 주체가 아닌 외부 개발자/회사 (예: 카카오 API로 앱을 만드는 외부 개발자)인터오퍼러빌리티서로 다른 시스템끼리 문제없이 통신할 수 있는 능력캐싱한 번 가져온 데이터를 저장해두고 재사용하는 것 (서버/DB까지 안 가도 됨)CDN전 세계 여러 곳에 서버를 두고 가장 가까운 서버에서 응답을 돌려주는 인프라HTTP 메서드GET, POST, PUT, DELETE, PATCH 등 — HTTP 동사(verb)라고도 부름WSDLSOAP API의 명세서..

[코테] 정렬 | 프로그래머스 Lv2. 가장 큰 수

1. 문제 분석문제 요약정수 배열 numbers가 주어질 때, 원소들을 이어붙여 만들 수 있는 가장 큰 수를 문자열로 반환한다.입출력 예시numbers = [3, 30, 34, 5, 9] → "9534330"numbers = [0, 0, 0] → "0"핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"이어붙여서 가장 큰 수"커스텀 정렬 (Comparator)단순히 숫자 크기로 정렬하면 안 된다는 걸 바로 알아챌 수 있었다. 이어붙였을 때 더 큰 쪽이 앞에 오는 커스텀 정렬이 필요하다.2. 풀이 과정단순 숫자 정렬이 안 되는 이유[3, 30] → 숫자 크기로 정렬하면 [3, 30] → "330" 근데 "330" vs "303" → "330"이 더 크니까 맞는 것 같지만[3,..

[코테] 정렬 | 프로그래머스 Lv1. K번째 수

1. 문제 분석문제 요약array와 commands가 주어진다.각 command는 [i, j, k]를 의미한다.array의 i번째부터 j번째까지 자르기자른 배열을 정렬하기k번째 수를 결과 배열에 추가입출력 예시array = [1, 5, 2, 6, 3, 7, 4]commands = [[2,5,3], [4,4,1], [1,7,3]]→ [5, 6, 3]핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"자르고 → 정렬하고 → k번째"정렬 후 인덱스 접근문제를 보자마자 "자르고, 정렬하고, k번째 꺼내기" 세 단계가 보였다.정렬 문제라는 걸 바로 알아챌 수 있었다.2. 풀이 과정의사코드commands를 순회하면서 → Arrays.copyOfRange()로 i부터 j까지 자르기 → Arrays.sort(..

[코테] Queue | 프로그래머스 Lv2. 프로세스

https://foreverwon.tistory.com/entry/자료구조-Stack과-Queue-개념 Stack과 Queue 개념Stack — 프링글스 통넣을 때도 위에서, 꺼낼 때도 위에서마지막에 넣은 게 먼저 나오는 구조 → LIFO (Last In First Out)push(1) → [ 1 ]push(2) → [ 1 | 2 ]push(3) → [ 1 | 2 | 3 ]pop() → [ 1 | 2 ] 꺼낸 값: 3pop() →foreverwon.tistory.com📌 문제 분석운영체제의 일부 기능을 구현한 문제입니다. 프로세스의 우선순위에 따라 실행 순서가 바뀔 때, 특정 프로세스가 몇 번째로 실행되는지 구하세요.핵심 조건대기 중인 프로세스 중 우선순위가 높은 게 있으면 → 맨 뒤로 이동우선순위가 ..

[코테] Queue | 프로그래머스 Lv2. 기능개발

https://foreverwon.tistory.com/entry/자료구조-Stack과-Queue-개념 Stack과 Queue 개념Stack — 프링글스 통넣을 때도 위에서, 꺼낼 때도 위에서마지막에 넣은 게 먼저 나오는 구조 → LIFO (Last In First Out)push(1) → [ 1 ]push(2) → [ 1 | 2 ]push(3) → [ 1 | 2 | 3 ]pop() → [ 1 | 2 ] 꺼낸 값: 3pop() →foreverwon.tistory.com📌 문제 분석각 기능의 진도와 작업 속도가 주어집니다. 앞 기능이 완료되어야 뒤 기능도 배포할 수 있을 때, 각 배포마다 몇 개의 기능이 함께 배포되는지 구하세요.핵심 조건앞 기능이 완료되지 않으면 뒤 기능은 배포 불가같은 날 완료되는 기..

[코테] Stack | 프로그래머스 Lv2. 올바른 괄호 + charAt(index)

https://foreverwon.tistory.com/entry/자료구조-Stack과-Queue-개념 Stack과 Queue 개념Stack — 프링글스 통넣을 때도 위에서, 꺼낼 때도 위에서마지막에 넣은 게 먼저 나오는 구조 → LIFO (Last In First Out)push(1) → [ 1 ]push(2) → [ 1 | 2 ]push(3) → [ 1 | 2 | 3 ]pop() → [ 1 | 2 ] 꺼낸 값: 3pop() →foreverwon.tistory.com📌 문제 분석괄호가 올바르게 짝지어졌는지 확인하는 문제핵심 조건( 와 ) 로만 이루어진 문자열 s가 주어짐괄호가 올바르게 짝지어져 있으면 true, 아니면 false 리턴올바른 괄호 vs 올바르지 않은 괄호( ( ) ) → true ..

728x90