Problem Solving
[프로그래머스, 42842] 카펫 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 75.5 MB, 시간: 0.05 ms사용 알고리즘: 수학, 완전탐색 yellow의 가로 길이를 x, 세로 길이를 y라고 할 때,yellow = x * y이다. brown은 yellow를 한 줄 감싸고 있으므로 yellow 위아래(x * 2) + yellow 왼쪽오른쪽(y * 2) + 4개의 모서리로 이루어져 있으므로 brown = (x * 2) + (y * 2) + 4이다.이를 만족하는 x와 ..
[프로그래머스, 12937] 짝수와 홀수 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12937 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 72.9 MB, 시간: 0.03 ms사용 알고리즘: 구현 class Solution { public String solution(int num) { String answer; if(num % 2 == 0) answer = "Even"; else answer = "Odd"; return answer; }}
[프로그래머스, 17685] [3차] 자동완성 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/17685 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 302 MB, 시간: 233.63 ms사용 알고리즘: 트리 각 단어의 문자들을 하나의 노드로 트리 형태로 만든다.단어 "go"를 만들기 위해서 root -> 'g' -> 'o' 형태로 트리를 만든다.단어 "gone"을 만들기 위해서 "go"를 만들며 이미 생성된 노드를 타고 root -> 'g' -> 'o'까지 이동한다.이어서 이동하며 'o' -> 'n' -> 'e'를 만든다.마찬가지로 "gu..
[프로그래머스, 12938] 최고의 집합 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12938 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 53.9 MB, 시간: 0.40 ms사용 알고리즘: 수학 집합의 모든 원소들이 수를 비슷하게 나눠가져야 곱했을 때 가장 큰 수를 얻을 수 있다.따라서 모든 원소들이 s를 n으로 나누었을 때 몫을 기본으로 가지고s를 n으로 나누었을 때의 나머지 값을 집합의 뒷 원소들이 1씩 나눠 갖는다.(answer 배열을 오름차순 정렬한 후 리턴해야 하기 때문에, 뒷 원소들을 +1 해준다.)import jav..
[프로그래머스, 12973] 짝지어 제거하기 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 63 MB, 시간: 62.68 ms사용 알고리즘: 자료구조, 스택 문자열의 문자들을 하나씩 스택에 넣는다.만약 스택의 바로 위에 있는 문자가 현재 스택에 넣으려는 문자와 같다면, 알파벳이 2개 붙어있는 짝을 찾은 것이므로 pop을 통해 짝지어 제거하기를 해준다.그게 아니라면 해당 문자를 push 해준다.import java.util.*;class Solution{ public int..
[프로그래머스, 12934] 정수 제곱근 판별 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12934 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 73.8 MB, 시간: 0.06 ms사용 알고리즘: 수학 class Solution { public long solution(long n) { // n에 대한 루트 계산 long x = (long)Math.sqrt(n); // 다시 제곱 long tmp = (long)Math.pow(x, 2); ..
[프로그래머스, 12929] 올바른 괄호의 갯수 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 93.6 MB, 시간: 26.49 ms사용 알고리즘: 백트래킹, 완전 탐색 처음엔 괄호 모양에 따라 dp로 풀려고 했는데 예외가 너무 많은 것 같아서 포기n의 최대가 14라 $2^{14}$ 밖에 걸리지 않으므로 그냥 완전 탐색으로 풀었다.class Solution { static int n; static int answer; public int solution(i..
[프로그래머스, 12987] 숫자 게임 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 63.1 MB, 시간: 112.35 ms사용 알고리즘: 정렬 A와 B의 점수를 모두 오른차순으로 정렬한 후, A 배열을 순회하며 항상 최선의 경우를 찾는다.항상 최선의 경우란, 아직 출전하지 않은 B팀의 점수 중 현재 확인 중인 A팀의 점수보다 큰 수 중 가장 작은 점수가 출전하는 것이다.만약 그런 점수를 찾을 수 없다면, 아직 확인하지 않은 남은 A팀의 점수들도 찾을 수 없다는 뜻이므로 br..
[프로그래머스, 12945] 피보나치 수 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12945 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 75.6 MB, 시간: 2.59 ms사용 알고리즘: 다이나믹 프로그래밍class Solution { private static final int MOD = 1_234_567; public int solution(int n) { int[] dp = new int[n + 1]; // 피보나치 수를 저장할 dp 배열 dp[1] = 1;..
[프로그래머스, 12933] 정수 내림차순으로 배치하기 (java)
https://school.programmers.co.kr/learn/courses/30/lessons/12933 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr메모리: 78.4 MB, 시간: 0.03 ms사용 알고리즘: 구현class Solution { public long solution(long n) { int[] count = new int[10]; // 인덱스에 해당하는 수가 몇 개인지 저장 while(n > 0) { count[(int)(n % 10)]++; n /=..