💡Problem Solving/Programmers 72

[프로그래머스] 게임 맵 최단거리 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr #풀이 BFS 알고리즘으로 도착 지점 도달까지의 최단 거리를 구하여 리턴하였다. #소스코드 import java.util.*; class Solution { public int[][] dir = new int[][]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; public int[][..

[프로그래머스] 뉴스 클러스터링 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr #풀이 1. 각 문자열을 두 문자씩 쪼개서 Map에 넣는다. 이때 value값은 해당 문자가 나온 횟수이다. - 정규식을 이용해 특수문자가 포함된 문자를 필터링한다. - 이 때 원소의 총 개수를 count한다. 2. 교집합의 개수를 구한다. - 둘 중 하나의 맵을 순회하면서 다른 맵의 동일한 key가 있는지 체크하여, 동일한 key가..

[프로그래머스] 소수 찾기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr #소스코드 import java.util.*; class Solution { public ArrayList primes = new ArrayList(); public int[] numbers; public boolean[] used; public int num, count; public boolean isPrime(int k){ if(k <..

[프로그래머스] JadenCase 문자열 만들기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/12951# 코딩테스트 연습 - JadenCase 문자열 만들기 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 programmers.co.kr #풀이 단어가 공백으로 구분되어 주어지는데 공백의 칸 수가 들쑥 날쑥 할 수 있다. split(" ")으로 쪼갰다가 틀린 케이스가 존재해서 정규식으로 뒤에 공백까지 포함해서 단어를 나눠서 처리하였다. 마지막 단어 뒤에는 공백이 없거나 또는 공백이 있을 수 있다. 공백이 있다면 while문에서 처..

[프로그래머스] 오픈채팅방 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr #풀이 id, name 쌍을 가지는 HashMap을 이용하였다. record를 순회하면서 id, name 쌍을 만들고 요청이 있을 경우 name을 업데이트 한다. name은 변경될 수 있으므로 name대신 id를 넣어서 문자열을 저장해둔다. 순회가 끝난 후 문자열 내 id를 name으로 변경한다. #소스코드 import java.util.*; class ..

[프로그래머스] 예상 대진표 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/12985# 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr #풀이 번호 간격이 1이더라도 해당 라운드에서 대진하지 않을 가능성이 있다. 예를 들어 아래 4, 5번 선수는 3라운드에서야 만날 수 있다. 1) a와 b의 차이가 1을 초과할 경우 번호를 다시 매긴다. 2) 차이가 1이여도 a와 b를 각각 2로 나눈 몫이 같을 경우 번호를 다시 매긴다. 1 2 1 2 3 4 1 2 3 4 5 ..

[프로그래머스] 이진 변환 반복하기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr #풀이 문자열의 초기 length 를 구한 후 0을 제거한 length 와 비교하여 zero count를 구하여 더해준다. 0을 지운 후의 문자열 length의 길이로 Integer.toBinaryString() 함수를 호출하여 이진수 String을 다시 변수에 할당한다. 이후 변환 횟수를 증가시킨다. #소스코드 import java.util.*; class Solution { public int[] solution(String s) { int zeroCnt = 0, transCnt = 0, bfLen = 0, afLen = ..

[프로그래머스] H-Index (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/42747# 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr #소스코드 import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; // stream 을 얻어서 Integer로 Wrap한 후, 내림차순으로 정렬한 후, int형으로 변환하여 Array로 리턴한다. citations..

[프로그래머스] 행렬의 곱셈 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr #풀이 행렬의 곱셈을 프로그램으로 구현한다. A행렬의 i행과 B행렬의 j행의 모든 성분의 곱을 합한 것이 결과 행렬의(i, j)의 성분이 된다. A행렬의 크기가 m*n, B행렬의 크기가 n*p일 경우 결과 행렬의 크기는 m*p가 된다. https://en.wikipedia.org/wiki/File:Matrix_multiplication_d..

[프로그래머스] 괄호 회전하기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr #소스코드 import java.util.*; class Solution { public boolean isRight(char[] arr){ Stack st = new Stack(); for(int i = 0; i < arr.length; i++){ char cur = arr[i]; if(i == 0) { // 첫 번째 문자가 닫는 괄호일 경우 바로 false 리턴 if(cur == ']' || cur == '}' || cur == ')') return false; // 첫 번째 문자는 일단 Stack에 넣는다. st.push(cu..