[프로그래머스] 올바른 괄호 (JAVA) 풀이
·
코딩테스트
올바른 괄호🔗문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이 🚨타임아웃 : Split("") + String[] 조합더보기split은 정규식 기반이라 무겁고 String 객체도 엄청 많이 만들어지기 때문에 느려질 수 있다. 단순 문자 순회에서는 charAt() + for문이 훨씬 빠르고 자주 사용하는 패턴! [문제 탐색] 문자 길이 만큼 돌리기여는 괄호 '(' 만나면 스택에 push닫는 괄호 ')' 만나면stack.empty() 이면 false비지 않았으면 pop()문자열을..
[프로그래머스] 오픈채팅방 (JAVA) 풀이
·
코딩테스트
오픈채팅방🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이[문제 탐색]아이디마다 마지막 상태를 저장하고 메시지에 매핑하는 방식으로 해결하였다.Enter / Change 일 때만 HashMap에 상태 업데이트 → 나중에 들어온 값이 이전값을 덮어쓰기 때문에 "마지막 닉네임이 됨"Enter / Leave 에 대해서만 메시지 출력메시지를 List로 저장한 후 String[] 로 변환[가능한 시간복잡도]record.length : Nsplit(" ") : O(문자열 길이) → 전체 ..
[프로그래머스] 가장 큰 수 (JAVA) 풀이
·
코딩테스트
가장 큰 수🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이처음에는 백트래킹 방법으로 조합 가능한 경우들을 모두 구한 후 가장 큰 값을 뽑아냈었다. 하지만 조합 가능한 경우를 모두 만들어 내는 것은 비효율적이라 규칙을 찾아서 문제를 해결하였다. 🚨왜 백트래킹(순열)은 터질 수 밖에 없을까?numbers 길이가 N일때,백트래킹 = 모든 순열 = N! 개 조합N이 10만까지 갈 수 있는데 10만! 은 상상 할 수 없을 만큼 크다⇒ 정렬 한 번으로 끝내는 규칙을 찾아야 함 🤔..
[프로그래머스] 의상 (JAVA) 풀이
·
코딩테스트
의상🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이[문제 탐색]조합 공식을 이용해서 풀면 간단하다.HashMap에 의상 종류 별로 몇 개씩 있는지 저장해 준다. (ex. 상의:2)각 의상 종류에서 하나씩 뽑을 수 있는 경우의 수를 구한다. (안입는 경우도 포함)얼굴 : 안경, 선글라스, 안 입음 → 3가지상의 : 파란색 티셔츠, 안 입음 → 2가지모두 안 입는 경우는 없으므로 전체 경우의 수에서 -1 해준다. (안 입음, 안 입음, 안입음 경우)[가능한 시간복잡도]의상 분류..
[프로그래머스] 전화번호 목록 (JAVA) 풀이
·
코딩테스트
전화번호 목록🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✅ 문제 풀이[문제 탐색]1차원 배열의 요소를 HashSet에 넣는다.HashMap을 사용하는 것보다 HashSet을 통해 중복 확인을 해서 빠른 검색을 할 수 있다.바깥 for문 : 각 전화번호를 순회한다. 안쪽 for문 : 해당 전화번호의 모든 접두사를 하나씩 만들어서 확인한다. 그 접두사가 실제로 HashSet 안에 존재한다면 false를 리턴한다.[가능한 시간복잡도]HashSet 삽입 : O(N)접두사 검사 : O(N ..
[북스터디] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장
·
BookStudy
개요시스템의 용량이나 성능 요구사항을 개략적으로 추정할 수 있는 방법에 대해 알아보자. 개략적 규모 추정을 위해서는 2의 제곱수, 응답지연(latency), 가용성과 관련된 수치들을 이해하고 있어야한다. 2의 제곱수분산 시스템에서 다루는 데이터 양은 엄청 커질 수 있으나, 데이터 볼륨의 단위를 2의 제곱수로 표현할 수 있다.최소 단위는 1byte 이고 8bit로 구성된다. ASCII 문자 하나가 차지하는 메모리 크기가 1byte 이다. 응답지연 값 (latency)구글의 제프 딘이 2010년에 응답지연 값을 공개한 적이 있다. 이 수치들로 컴퓨터 연산들의 처리 속도를 짐작할 수 있다. 이 수치를 분석해보면 다음과 같은 결론이 나온다. 메모리는 빠르지만 디스크는 아직 느리다.디스크 탐색(seek)은 가능..
[북스터디] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장
·
BookStudy
개요단일 서버로부터 대규모 사용자들이 사용할 수 있는 서버로까지 확장 과정에서 고려해야 할 부분에 대해 배울 수 있다. 단일 서버하나의 서버에서 실행되는 상태. 사용자가 늘어나면 하나의 서버로 부족하기 때문에 여러 서버를 두어야한다. DB 계층 분할하나는 들어오는 트래픽을 처리하는 웹 서버, 데이터를 처리하는 데이터베이스 서버로 분리해준다. 서버가 늘어나서 단일 서보보다 더 많은 요청을 처리할 수 있게 되었다.수평적 확장 (scale-out)로드밸런서 하지만 서비스의 사용자가 늘어나서 웹서버 1개와 데이터베이스 서버 1개로는 힘들어 웹서버를 증설하려고 한다. 웹서버를 증설하고 각 서버에 동일한 트래픽으로 분산해주기 위해 로드밸런서를 추가해준다.웹서버가 여러 대가 되었기 때문에 더 많은 사용자들의 트래픽을..
[프로그래머스] 여행 경로(JAVA) 풀이
·
코딩테스트
여행 경로🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이[문제 탐색 및 알고리즘 선정]1. 모든 티켓을 사용해야 한다 : 단순 최단 경로나 경유지 찾기가 아니라 가능한 모든 경로 탐색해야 함2. 시작점 : ICN3. 여러 경로가 가능하면 알파벳 순서 : 알파벳 순서가 가장 앞선 경로를 선택해야 하므로 정렬 필요 🤔 DFS + 백트래킹 선택 이유모든 경로 탐색 : 모든 가능한 경로를 탐색할 수 있으며 주어진 항공권을 모두 사용한 경로를 찾을 수 있음백트래킹 : 사용여부(vi..
[프로그래머스] 기능 개발(JAVA) 풀이
·
코딩테스트
기능 개발🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이[문제 탐색]각 기능은 개발이 완료되면 앞선 기능과 함께 배포기능 별로 완료되는데 걸린 시간을 계산한 뒤 배포 단위를 구함기능 별 완료일 계산완료일 기준으로 앞 기능보다 늦게 끝나는지 여부 확인 → 배포 단위 카운팅[코드 설계]완료 날짜 계산남은 작업량 / 속도 → 수식으로 완료일 계산수식 : Math.ceil(100 - progresses[i]) / speeds[i]queue 에 완료일 저장배포 단위 묶음 계산head..
[프로그래머스] 소수 찾기(JAVA) 풀이
·
코딩테스트
소수 찾기🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr✅ 문제 풀이[문제 탐색]문자열로 주어진 숫자를 이용해 만들 수 있는 모든 숫자 조합 생성입력된 숫자를 하나씩 뽑아 순열(백트래킹) 방식으로 모든 조합 생성HashSet을 사용해 중복 제거 (e.g. 011 과 11 중복)[코드 설계]입력받은 문자열을 int[] 배열로 변환하여 사용순열로 조합 생성boolean 배열을 사용해 이미 뽑은 숫자는 다시 안 뽑도록 체크StirngBuilder 를 이용해 현재까지 만든 숫자 문자열 유지각 ..