프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)
·
코테(Solved.ac + Programmers)
📌 문제 링크 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr📌 문제 개요두 개의 지도를 겹쳐서 하나의 비밀지도를 만드는 문제다.각 지도는 정수 배열로 주어지고, 각 정수를 이진수로 변환했을 때 1은 벽, 0은 공백을 의미한다. 두 지도 중 하나라도 벽인 위치는 최종 지도에서도 벽 #이 되고, 두 지도 모두 공백인 위치만 공백 " "이 된다.📌 접근 방법이 문제는 두 지도를 한 줄씩 비교하면 된다.예를 들어 첫 번째 줄이 다음과 같다고 하면,arr1 = 01001arr2 = 11110두 지도 중 하나라도 1이면 벽이므로 OR 연산을 사용한다.0100111110-----11111결과 이진수에서 1은 #, 0은..
프로그래머스 모의고사 JAVA 풀이 (완전탐색)
·
코테(Solved.ac + Programmers)
📌 문제 개요수포자 3명이 각각 다른 패턴으로 문제를 찍는다.정답 배열이 주어졌을 때 가장 많은 문제를 맞힌 사람의 번호를 반환하는 문제이다.동점자가 여러 명인 경우 오름차순으로 모두 반환해야 한다.📌 접근 방법각 수포자의 찍는 패턴을 배열로 저장한다. 문제 수는 패턴 길이보다 길 수 있으므로 % 연산을 사용해 패턴을 반복한다.int[] p1 = {1, 2, 3, 4, 5};int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};각 문제마다 정답과 비교하여 맞힌 개수를 저장한다.모든 문제를 확인한 뒤 가장 높은 점수를 찾고, 해당 점수를 가진 사람을 결과에 담는다.p1[i % p1.length]📌 핵심 아이디어1. ..
프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)
·
코테(Solved.ac + Programmers)
📌 문제 개요매일 가수의 점수가 발표된다.명예의 전당에는 항상 상위 k개의 점수만 유지하며, 매일 명예의 전당에 등록된 점수 중 가장 낮은 점수를 발표한다.주어진 score 배열에 대해 매일 발표되는 최하위 점수를 구하는 문제이다.📌 접근 방법처음에는 모든 점수를 저장한 후 정렬을 반복하는 방법을 생각할 수 있다.하지만 점수가 들어올 때마다 정렬을 수행하면 비효율적이다.따라서 현재 명예의 전당에 포함된 점수들만 관리하는 PriorityQueue(최소 힙)를 사용한다.📌 처리 순서오늘의 점수를 힙에 추가힙 크기가 k를 초과하면 최솟값 제거힙의 최솟값(peek)을 정답 배열에 저장📌 핵심 아이디어명예의 전당에는 항상 상위 k개의 점수만 존재해야 한다.따라서 최소 힙의 크기를 k로 유지하면 된다.예를 ..
프로그래머스 콜라 JAVA 풀이 (구현, 시뮬레이션)
·
코테(Solved.ac + Programmers)
🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/132267📌 문제 개요빈 병 a개를 가져다주면 콜라 b병을 받을 수 있는 마트가 있다.현재 빈 병이 n개 있을 때, 더 이상 교환할 수 없을 때까지 반복하여 받을 수 있는 콜라의 총 개수를 구하는 문제이다.📌 접근 방법이 문제는 실제 교환 과정을 그대로 구현하는 시뮬레이션 문제이다.현재 보유한 빈 병 수가 a개 이상인 동안 계속 교환을 진행한다.교환 가능한 횟수 계산받은 콜라 수 누적남은 빈 병 수 갱신📌 핵심 아이디어교환 가능한 횟수 : int exchange = n / a;이번에 받는 콜라 수 : exchange * b 받은 콜라를 모두 마시면 다시 빈 병이 되므로 다음 보유 ..
카드 뭉치 JAVA 풀이 (구현, 문자열)
·
코테(Solved.ac + Programmers)
🔗 문제 링크 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr📌 문제 개요두 개의 카드 뭉치가 주어지고, 각 카드 뭉치의 순서는 변경할 수 없다.또한 카드를 건너뛰면서 사용할 수도 없다. 주어진 goal 배열을 순서대로 만들 수 있는지 판단하여 가능하면 "Yes", 불가능하면 "No"를 반환하는 문제📌 접근 방법카드 뭉치의 순서를 변경할 수 없으므로 각 카드 뭉치에서 현재 사용할 수 있는 카드 위치만 관리하면 된다.이를 위해 다음 두 개의 인덱스를 사용했다.int index1 = 0;int index2 = 0;index1 : cards1의 현재 위치index2 : cards2의 현재 위치goal을 순서대로 ..
프로그래머스 숫자 문자열과 영단어 JAVA 풀이 (문자열, replace)
·
코테(Solved.ac + Programmers)
🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/81301📌 문제 개요숫자의 일부 또는 전체가 영단어로 표현된 문자열이 주어진다. 문자열에 포함된 영단어를 숫자로 변환하여 원래 숫자를 반환 one4seveneight// 1478 📌 접근 방법숫자와 영단어는 다음과 같이 1:1로 대응 숫자 영단어 0zero1one2two3three4four5five6six7seven8eight9nine영단어를 배열에 저장한 후 반복문을 돌면서 숫자로 치환String[] words = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine..
[프로그래머스] K번째수 JAVA 풀이 (알고리즘, 시간복잡도)
·
코테(Solved.ac + Programmers)
🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42748📌 문제 개요배열의 특정 구간을 잘라낸 뒤 정렬하고,그 중 k번째 숫자를 구하는 문제[1, 5, 2, 6, 3, 7, 4]2~5까지 자르기→ [5, 2, 6, 3]정렬→ [2, 3, 5, 6]3번째 숫자→ 5commands에 있는 모든 명령을 수행한 결과를 배열로 반환하면 됩니다.📌 접근 방법각 command마다 순서로 처리시작 인덱스와 끝 인덱스 구하기배열 자르기정렬하기k번째 값 저장하기배열 자르기는 Arrays.copyOfRange()를 사용하면 쉽게 해결할 수 있습니다.📌 핵심 아이디어Arrays.copyOfRange()Arrays.copyOfRange(array, s..
프로그래머스 푸드 파이트 대회 JAVA 풀이
·
코테(Solved.ac + Programmers)
🔗 문제 링크 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr📌 문제 개요두 선수가 같은 음식 종류와 개수를 같은 순서로 먹을 수 있도록 음식을 배치하는 문제중앙에는 물을 의미하는 0이 들어가고, 양쪽은 서로 대칭 구조가 되어야 한다.📌 접근 방법각 음식은 두 선수가 똑같이 나누어 먹어야 하므로 사용할 수 있는 개수는 food[i] / 2개다.왼쪽 문자열을 먼저 만든 뒤, 가운데 0을 넣고 왼쪽 문자열을 뒤집어 오른쪽에 붙이면 된다.📌 핵심 아이디어왼쪽 + 0 + 뒤집은 왼쪽예를 들어 food = [1, 3, 4, 6]이면1번 음식: 3 / 2 = 1개2번 음식: 4 / 2 = 2개3번 음식: 6 / 2 ..
프로그래머스 두 개 뽑아서 더하기 (JAVA)
·
코테(Solved.ac + Programmers)
🔗 문제 링크프로그래머스 - 두 개 뽑아서 더하기📌 문제 개요정수 배열 numbers에서 서로 다른 인덱스의 두 수를 선택하여 더한 값을 구하는 문제입니다.조건:같은 인덱스는 사용할 수 없음중복된 결과 제거오름차순 정렬 후 반환ex : [2,1,3,4,1]가능한 합: 2, 3, 4, 5, 6, 7📌접근 방법모든 경우의 수를 확인하기 위해 이중 반복문을 사용for(int i = 0; i j = i + 1 부터 시작자기 자신 선택 방지중복 조합 제거 TreeSet을 사용하여 동시에 처리중복 제거오름차순 정렬📌 핵심 아이디어1. TreeSet 사용TreeSet 특징:중복 제거자동 오름차순 정렬따라서 별도의 정렬 코드가 필요 없습니다.TreeSet set = new TreeSet();2. 두 수 조합 생..
프로그래머스 시저 암호 JAVA (문자열, 구현, 아스키코드)
·
코테(Solved.ac + Programmers)
🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12926📌 문제 개요문자열의 각 알파벳을 일정 거리만큼 이동시키는 시저 암호 문제"AB" → 1칸 이동 → "BC""z" → 1칸 이동 → "a"처럼 알파벳 범위를 넘어가면 다시 처음으로 순환해야 한다.또한 공백은 그대로 유지해야 한다.📌 접근 방법문자열을 한 글자씩 순회하면서 다음과 같이 처리했다.공백이면 그대로 추가대문자면 'A' ~ 'Z' 범위 기준 이동소문자면 'a' ~ 'z' 범위 기준 이동% 26 연산으로 알파벳 순환 처리문자열 연결은 StringBuilder를 사용📌 핵심 아이디어시저 암호 핵심 공식은 아래와 같다. 대문자 이동(ch - 'A' + n) % 26 + '..