728x90
⬛ 프로그래머스 | LV.2 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚 문제 접근 방식 어떻게 풀어야 하는지 도저히 모르겠어서 풀이를 찾아봤고, 이해한 내용 토대로 정리했다. 문제 제한 조건을 잘 확인해야 한다. 1) 노란색 격자 yellow는 최소 1이상의 값이 반드시 들어온다. 즉, 적어도 1개의 노란 격자가 중앙에 반드시 존재해야 한다. 이를 만족시키려면 그림처럼 격자 크기가 가로, 세로 모두 3이상의 값을 가져야 한다. 2..
⬛ 프로그래머스 | LV.2 소수 찾기 - DFS 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚 문제 접근 방식 DFS로 만들 수 있는 모든 숫자 조합으로 깊이 뻗되, 1) 중복없이 뻗고 2) 만들어진 수가 소수인지 판별하는 방식으로 풀고자 했다. 우선 numbers 각각의 값들로 만들 수 있는 모든 경우의 숫자를 DFS로 깊이 탐색하면서 빠짐없이 만들어야 한다. 중복없이 만들어야 하기 때문에 visited 로 방문 체크하면서 뻗어갔..
⬛ 프로그래머스 | LV.2 전력망을 둘로 나누기 - DFS 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/86971 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚문제 접근 방식 초반에는 중심 정점을 찾아서 두 개의 트리를 나누는 게 두 트리 소속 정점 개수 차이가 최소가 된다고 생각했는데, 반례가 생기는 것을 확인했다. 따라서 모든 간선을 1개씩 빼보면서 최솟값을 찾는 방식으로 다시 접근했다. 1) 양방향 간선을 wires 배열 순회하면서 ArrayList graph에 차례대로 담아둔다...
⬛ 프로그래머스 | LV.2 할인 행사 - HashMap 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 HashMap 의 형태로 정답 map을 먼저 세팅해준다 (우리가 모두 할인받기 원하는 물품별 개수) 우리가 구해야 하는 것은 ‘원하는 제품을 모두 할인받는 게 가능한 [회원 등록 날짜]’ 의 개수이다. discount[] 배열은 최소 길이 10 이상인데, 우리가 언제부터 시작하든 해당 날짜 ~ 10일간의 할인 기록 경우를..
⬛ 프로그래머스 | LV.2 N개의 최소 공배수 - 유클리드 호제법 https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 이 문제를 풀기 위해서는 ‘유클리드 호제법’에 대해서 알아야 한다. 1) 최대 공약수를 구할 때, ‘유클리드 호제법’을 사용하여 구하고 2) 최소 공배수 = (a * b) / 최대 공약수 로 구한다. 따라서 이 문제는 유클리드 호제법을 먼저 이해하는 게 중요하다. [풀이 설명] gcd(int a, int b) 함수는 ..
⬛ 프로그래머스 | LV.2 방문 길이 - HashMap과 객체 equals, hashCode 재정의 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 기본적으로 dx와 dy를 정의하는 것도 U, D, L, R의 명령어에 맞게 제대로 정의해야 한다. U(위), D(아래), L(왼), R(오) int dx = {0, 0, -1, 1}; int dy = {1, -1, 0, 0}; 인덱스로 방향을 구분해주자. 만약 현재 명령어가 'U..
⬛ 프로그래머스 | LV.2 피로도 - 완전 탐색, DFS 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 문제에서 추론할 수 있는 핵심적인 사실은 다음과 같다. 목표 : 유저 탐험 가능한 최대 던전 수 구하기 각 던전은 하루에 한 번씩 탐험할 수 있다. ( = 중복 방문X. visited로 방문 체크해야 한다) 현재의 피로도 k 와 비교했을 떄, k보다 ‘최소 피로도’가 작거나 같아야 해당 던전 탐험이 가능하다. 각 던전마다..
⬛ 프로그래머스 | LV.2 괄호 회전하기 - Stack 활용 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/76502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 괄호 문자열을 1개씩 회전시킨 문자열 str (= 맨앞글자 맨뒤로) 의 상태가 (), [], {} ‘올바르 괄호’ 문자열인 경우에만 answer++해야하는 문제이다. 올바른 문자열의 판단은 Stack을 활용해야 한다. 여기서 중요한 게, 현재 찍은 charAt(j)의 값과 스택에서 peek()한 값이 짝을 이루어야 p..
⬛ 프로그래머스 | LV.2 의상 - HashMap & 경우의 수 문풀 💚나의 풀이 문제에서 최소 1개의 옷은 입는다고 되어있다. (= 모두 안입는 경우는 없다) 종류별로 입는 옷이 겹치면 안되고, 종류별로 각 1개의 옷만 걸칠 수 있다. 각 종류별로 옷을 겹치지 않게 1개씩 뽑거나 + 아예안뽑거나의 경우가 생긴다. 그리고 그 경우는 최소 1번의 사건에서 동시에 일어난다. 경우의 수 문제로 생각해서 수식까지 끌어내야 하는 문제였다. 💚 제출 코드 import java.util.*; class Solution { public int solution(String[][] clothes) { Map map = new HashMap(); for(String[] x : clothes){ String name = x..
⬛ 프로그래머스 | LV.2 예상 대진표 - 단순 구현 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/12985 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입출력 예 💚나의 풀이 처음에는 트리 형태로 뻗어가나 ? 쭉 타고 올라가서 Lv이 같아질 때 lv 값을 리턴해야 하나 ? 그런 생각으로 접근을 했다. 그냥 단순 구현 문제이다. A와 B는 반드시 올라간다고 생각을 하고, 매 라운드에서 N이 반으로 줄어들면서 소속 팀이 재배정(a/2) 된다. 여기서 하나의 규칙적인 수식이 파생되는데 이걸 ..
⬛ 프로그래머스 | LV.2 영어 끝말잇기 - HashMap 활용 https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전..
⬛ 프로그래머스 | LV.2 짝지어 제거하기 - Stack 활용 https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적..
프로그래머스 | LV.3 섬 연결하기 - 최소비용 신장 트리 https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다. 이 부분을 잘 봤어야 한다. 즉, 시작점은 costs[i][0] 이 되고, 끝점은 costs[i][1] 이 되며, 비용가중치는 costs[i..
프로그래머스 | LV.2 구명보트 (그리디) https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게..
⬛ 프로그래머스 | LV.2 게임 맵 최단거리 | BFS https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다. 지금부터 당신은 한 팀의 팀원이 되어 게임을 진행하려고 합니다. 다음은 5 x 5 크기의 맵에, 당신의 캐릭터가 (행: 1, 열: 1) 위치에 있고, 상대 팀 진영은..
프로그래머스 | LV.3 네트워크 문제 https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다...
⬛ 프로그래머스 | LV.2 타겟 넘버 문제 - DFS 문풀 https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💚나의 풀이 일단 각 배열의 값의 순서는 조절 X 배열의 각 idx별 값은 1) 더하거나 2) 빼는 경우만 있다. dfs로 해당의 경우를 깊이 탐색하며 끝에 다다랐을 때의 sum 값이 target과 일치할 때만 answer++;처리 class Solution { static int answer =0; //dfs static void df..
⬛ 프로그래머스 | LV.2 크기가 작은 부분 문자열 문제 풀이 for의 끝나는 조건을 문자열 t의 길이에서 p의 길이를 빼고 이를 i와 비교를 한다. 이때 String.length()는 문자열의 길이를 가져오기 때문에 주의해야한다. ("abcde"일 경우 String.length()는 5이다.) 이외에 주의해야 할것으로는 데이터 타입을 Long으로 잡아야 한다는 점이다. int로 할 경우 데이터의 범위가 (signed 기준) 2,147,483,647까지 나타낼수있고 이는 문제에서 요구하는 p의 길이의 최대값을 담지 못한다. 그렇기에 Long을 사용하거나 LongLong을 사용 해야한다. 코드 (1차 시도) - 런타임 오류 import java.util.*; class Solution { public i..
프로그래머스 | Lv.2 다음 큰 숫자 문제 풀이 입력된 n에 대한 2진수 속 1의 개수 카운팅시키기 while문 돌면서 n++ 시키며 n++의 2진수 속 1의 개수 카운팅 값이 태초의 n에 대한 카운팅 값과 일치하는 경우에 한해서만 answer = n 세팅한 뒤 break 걸어 while 탈출 코드 class Solution { public int solution(int n) { int answer = 0; //1) 일단 n의 2진수 속 1의 갯수 카운팅 String tmp = Integer.toBinaryString(n); int tmpCnt = 0; for(char x : tmp.toCharArray()){ if(x == '1') tmpCnt++; } boolean chk = false; while..