Coding Test/Programmers
-
[프로그래머스 Level2][Java] JadenCase 문자열 만들기Coding Test/Programmers 2021. 12. 9. 16:53
JadenCase 문자열 만들기 - 주어진 문자열에서 모든 단어의 첫 번째를 대문자로 바꿔 리턴하는 문제 ※ 생각하기 - 단어의 첫 번째 글자는 대문자 - 한 글자씩 확인하여 판단하기 - 공백을 기준으로 대문자 만들기 ※ 풀이법 1) 문자열을 더하기 때문에 answer를 StringBulider 객체로 바꾸기 1) 문자열 모두 소문자로 변환 2) 문자열의 길이만큼 for문을 돌리면서 한 글자씩 잘라서 조건에 따라 판단한다. - 첫 번째 글자와 이전 글자가 공백일 경우에 해당 글자를 대문자로 바꾸고 append()로 answer에 더해준다. - 나머지(숫자 , 공백)는 그냥 append()로 answer에 더해준다. 3) toString()으로 answer을 String 타입으로 변환 후 리턴한다. Lev..
-
[프로그래머스 Level2][Java] N개의 최소공배수Coding Test/Programmers 2021. 12. 9. 15:09
N개의 최소공배수 - 주어진 배열에 있는 수들의 최소공배수를 구해서 리턴하는 문제 ※ 생각하기 - 최소공배수 구하는 방법 : 두 수(A, B)가 있을 때, 두 수의 최소공배수 = '(A * B) / A, B의 최대공약수'이다. 물론, 최대공약수와 최소공배수는 소인수분해를 활용해 구할 수 있지만 숫자가 많아질수록 너무 많은 계산이 필요하다. 그리고 우리는 로직을 통해 구현해야하므로 '유클리드 호제법(유클리드 알고리즘)'을 활용해 간단하게 최대공약수를 구할 수 있고 이를 통해 최소공배수를 구할 수 있다. - 유클리드 호제법(= 유클리드 알고리즘) : 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이..
-
[프로그래머스 Level1][Java] 다트 게임Coding Test/Programmers 2021. 12. 8. 21:24
다트 게임 - 3번의 기회를 통해 얻은 점수의 합을 리턴하는 문제 ※ 생각하기 - 스타상(*)과 아차상(#)을 어떻게 처리할 것인가 - 어떻게 조건을 구현해서 계산을 할 것인가 ※ 풀이법 1) chArr[i]가 0 ~ 9일 때, 해당 문자를 String으로 형변환하여 temp에 더해준다.(chArr[i]가 10일 경우를 위함) 2) chArr[i]가 S, D, T일 경우 temp를 int 타입으로 형변환 한 후, Math.pow()로 제곱하여 계산해준다. 3) 계산된 값을 score[idx]에 저장하고 idx를 1 증가시킨 후 temp의 값을 비워준다.(다음 문자열을 받기 위함) 4) chArr[i]가 스타상(*), 아차상(#)일 경우 - 스타상(*)의 경우, 현재 점수(score[idx-1])에 2를 ..
-
[프로그래머스 Level1][Java] 크레인 인형뽑기 게임Coding Test/Programmers 2021. 12. 8. 20:13
크레인 인형뽑기 게임 - 크레인을 통해 인형을 뽑고 바구니에 담았을 때 같은 인형일 경우 떠트려져서 사라진다. 이 때, 터트려져서 사라진 인형의 개수를 리턴하는 문제 ※ 생각하기 - 인형을 뽑게되면 아래서부터 차곡차곡 쌓이고 같은 인형이면 위에서부터 터져서 사라짐 → Stack 구조 - 어떻게 뽑아야할지 고민하기 - 내가 뽑아야 하는 규칙 또는 방법 * -------------------------------------------------------------------- * moves[0] == 1 -> board[0~4][0] -> board[0~4][moves[0] - 1] * moves[1] == 2 -> board[0~4][1] -> board[0~4][moves[1] - 1] * moves[..
-
[프로그래머스 Level1][Java] 실패율Coding Test/Programmers 2021. 12. 8. 20:04
실패율 - 게임 스테이지마다 실패율을 구하고 그 실패율이 가장 높은 스테이지부터 내림차순으로 정렬하여 리턴하는 문제 ※ 생각하기 - 문제를 먼저 이해하자 - 실패율을 구하는 방법 ※ 풀이법 1) 스테이지를 key로 실패율을 value로 하는 HashMap 객체 생성(hs) 2) 1 ~ 스테이지 개수(N)만큼 돌리는 for문에서 스테이지 비교를 위한 변수(stage)를 생성하고 i 값으로 초기화한다. 그리고 스테이지에 도달했으나 클리어하지 못한 플레이어의 수와 스테이지에 도달한 플레이어 수를 담을 변수를 생성 (noClearPlayer, stageReachedPlayer) 3) 사용자가 멈춰있는 스테이지 번호만큼 이중 for문을 돌리며stages[i]와 stage(스테이지)가 같을 경우 스테이지에 도달했으..
-
[프로그래머스 Level1][Java] 신규 아이디 추천Coding Test/Programmers 2021. 12. 8. 19:26
신규 아이디 추천 - 아이디를 입력받아 7단계에 걸친 아이디 규칙에 맞는지 검사하여 새로운 아이디를 리턴하는 문제 ※ 생각하기 - 정규표현식 ※ 풀이법 1) 1단계 : toLowerCase()로 아이디를 소문자로 만들기 2) 2단계 : [^a-z0-9-_.] 정규표현식을 활용해 replaceAll() - ^가 [ ]안에 들어가게 되면 '^의 뒤 조건들을 빼고'라는 뜻이 된다. 3) 3단계 : [.]{2,} 정규표현식을 활용해 replaceAll() - []안에 있는 마침표가([.]) 2번({2}) 이상(,)이면 4) 4단계 : ^[.]|[.]$ 정규표현식을 활용해 replaceAll() - 마침표로 시작하거나(^[.]) 또는 (|) 마침표로 끝나면([.]$) 5) 5단계 : 빈 문자열이라는 것은 길이(l..
-
[프로그래머스 Level1][Java] 비밀지도Coding Test/Programmers 2021. 12. 8. 17:53
비밀지도 - 주어진 2개의 배열(arr1, arr2)를 겹쳐 벽(1) '#'으로 공백(0)은 ' '으로 치환하여 해석한 배열을 리턴하는 문제 ※ 생각하기 - 지도를 겹친다는 것은 각각의 배열 합친다는 것이다. - 배열의 수들을 각각 이진수로 변환해야 한다. - 1은 벽을 0은 공백을 의미한다. - 해석된 배열에서 벽은 '#' 공백은 ' '이다. ※ 풀이법 1) 변수 2개를 생성(temp, temp2)하고 Integer.toBinaryString()을 활용하여 이진수로 변환 한 값을 저장한다. 이 때, 이진수로 변환된 숫자의 첫 번째 값이 0이면 0이 생략되는데 이를 위해 0을 앞에 더해줄 필요가 있다. 2) 생략된 0을 더해주는 함수(addZero)를 만든다. 이진수와 지도의 크기를 파라미터로 받아 해당..
-
[프로그래머스 Level1][Java] 키패드 누르기Coding Test/Programmers 2021. 12. 8. 16:50
키패드 누르기 - 주어진 배열의 값을 가진 키패드의 숫자를 누를 때 왼손으로 누를 경우는 L, 오른손으로 누를 경우는 R로 하여 어느 손으로 눌렀는지 순서대로 문자열을 만들어 리턴하는 문제 ※ 생각하기 - 키패드를 2차원 배열로 생각하여 임의의 좌표를 설정할 것 - 왼손은 *, 오른손은 #에서 시작 - hand 파라미터를 통해 왼손잡이인지 오른손잡이인지 파악 - 1, 4, 7은 무조건 왼손으로 3, 6, 9는 무조건 오른손으로 누른다 - 현재 손의 위치와 눌러야할 숫자의 거리를 계산하여 더 작은 길이의 손으로 누른다. 만약, 계산된 거리가 같으면 hand를 통해 파악한 손으로 누른다. ※ 풀이법 1) 왼손으로 누른 숫자(leftFinger)와 오른손으로 누른 숫자(rightFinger) 변수를 생성한다...