[프로그래머스] 올바른 괄호 (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 ..
[프로그래머스] 소수 찾기(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 를 이용해 현재까지 만든 숫자 문자열 유지각 ..
[프로그래머스] 모의고사(JAVA) 풀이
·
코딩테스트
모의고사🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✅ 문제 풀이[문제 탐색]세 명의 수포자가 각각 일정한 규칙으로 답안을 찍음 → 각 사람의 찍는 규칙을 미리 배열로 정의실제 정답 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람의 번호 반환여러 명이 동점일 경우, 오름차순으로 모두 반환[코드 설계]찍기 패턴 정의수포자 3명의 규칙을 2차원 배열에 정의1번 : {1, 2, 3, 4, 5}2번 : {2, 1, 2, 3, 2, 4, 2, 5}3번 : {3, 3, 1, 1..
[프로그래머스] 타겟 넘버(JAVA) 풀이
·
코딩테스트
타겟 넘버🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🚨모든 가능한 조합을 탐색해서 target에 도달하는 경우의 수 세는 문제 → 어떤 방식으로 모든 조합을 탐색할 수 있을까? ✅ 문제 풀이[문제 탐색]숫자 배열 각 원소에 대해 가능한 선택 : 2가지총 n개의 숫자가 있을 때, 모든 가능한 경우의 수 : 2^n가지모든 경로를 따라가며 누적합을 구하는 방식 : DFS 사용루트 노드(초기 합 0) 에서 시작각 레벨마다 숫자 하나씩 선택하며 + or - 붙여서 내려감마지막 레벨까지 내려..
[프로그래머스] 폰켓몬(JAVA) 풀이
·
코딩테스트
폰켓몬🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 🚨맨 처음에 문제 푸는 방향성을 잘못 잡아서 먼 산을 돌아왔다 (..)조합(Combination)을 통해서 풀었는데 브루트포스(완전탐색) 방식으로 nums.length가 커질수록 시간복잡도가 O(N!)에 가까워진다. 가장 비효율적이고 타임아웃이 나므로 수학적 사고 + 자료구조(Set)를 사용해서 풀어줘야 한다.✅ 효율적으로 풀기[문제 탐색]선택할 수 있는 최대 수 : nums/2폰켓몬 종류의 수 : Set.size() (중..
[프로그래머스] 완주하지 못한 선수(JAVA) 풀이
·
코딩테스트
완주하지 못한 선수🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr💡 문제 설명더보기수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해 주세요. 제한사항마라톤 경기에 참여한 선수의 수는 1명 이상 100,..