문제 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를
문제 로직 위 문제는 문자열을 숫자로 변환만 하면 되는 간단한 문제이다. 자바에서는 문자열을 숫자로 변화하는 내장 함수가 존재하기 때문에 해당 내장 함수를 사용하여 문제를 해결하였다. 코드 결과

위 문제는 각 자릿수를 더하기 위해서 값을 하나씩 꺼내야 한다.N을 10으로 나눈 나머지를 answer에 더한 후 N/10을 한다.그렇게 하면 1의 자리 수는 answer에 더해진 후 사라지고 10의 자리수가 1의 자리가 된다.이렇게 N이 0이 될 때까지 반복한다.
문제 로직 위 문제는 모든 자릿수를 배열에 넣기 위하여 우선 배열의 길이를 알아야 한다. 그래서 숫자를 string으로 변환하여 배열의 길이를 먼저 구한다. 그 후에 n이 10이 될 때까지 n을 10으로 나눈 나머지를 배열에 순서대로 삽입하고 n/10을 진행한다.
문제 로직 n의 각 자릿수를 모두 배열에 넣는다. 그 후에 Arrays.sort()를 이용하여 오름차순으로 정렬한다. 코드 결과

배열을 순차적으로 접근하면서 모두 더한다.배열의 길이만큼 나눈 수를 return 한다.항상 헷갈리는 점이 하나 있다.배열의 경우 배열의 길이를 구하는 함수는 arr.length()이고 문자열의 경우 문자열의 길이를 구하는 함수는 arr.length이다.헷갈리지 않게 조

x를 copyX에 복사한다.자릿수의 합을 저장할 변수를 sum이라고 한다.copyX가 0이 될 때까지 10으로 나누고, 10으로 나눈 나머지는 sum에 더하고, 10으로 나눈 값을 다시 copyX에 저장한다.x%sum이 0이라면 true를 반환하고 0이 아니라면 fal

만약 a가 b보다 크다면 a와 b의 값을 바꿔준다.i가 a부터 b까지 값을 할당 받도록 for 문을 생성한다.i를 sum에 더한다.나는 숫자를 하나씩 할당하면서 더했는데 등차수열의 합이라는 수학 공식이 있음을 다른 사람의 풀이를 보고 깨달았다...수학 공부 다시 열심히

i에 2부터 n-2까지 값을 할당하는 반복문을 실행한다.만약 n%i = 1 이라면 i를 return 한다.반복문을 나왔다면 n-1을 return 한다.

a와 b에서 각각 뽑은 두 수를 곱한 값의 누적이 최소가 되게 하려면 a의 최솟값, b의 최댓값을 순서대로 뽑아야 한다.배열 a와 b의 정렬을 진행한다.a 배열의 i 번째 인덱스와 b의 (b.length-i-1) 번째 인덱스의 값을 곱한다.두 수를 곱한 후 answer

띄어쓰기를 기준으로 문자열을 나누어 배열에 저장한다.배열의 각 값에 접근하여 해당 문자열의 각 자리에 접근한다.첫 번째 글자는 upperCase로 변경하고 나머지 모든 글자는 lowerCase로 변경한다.첫 번째 문자만 대문자로 변경하는 방법첫 번째 문자만 대문자로 바

문제 로직 코드 결과

문제 로직 먼저 n이 1인 경우에는 0을 return 한다. for문을 이용하여 i는 1~500까지 과정을 반복한다. 반복문 아래에서는 아래를 순서대로 실행한다. n이 짝수라면 2로 나눈다. n이 홀수라면 3을 곱하고 1을 더한다. 만약 n이 1이 되었다면 i를 r

배열의 길이만큼 for 문을 돌면서 아래를 실행한다.1\. 만약 signsi가 true라면 answer에 absolutei를 더한다.2\. 만약 signsi가 false라면 answer에 absolutei를 뺀다.반복문을 탈출함녀 answer를 반환한다.

문제 로직 integer 배열 형태로 들어온 numbers 변수를 먼저 List 형태로 변환한다. 그 후에 0부터 9까지 반복문을 실행한다. 반복문 안에서 ArrayList의 indexOf 함수를 이용하여 해당 숫자가 존재하는지 확인한다. (만약 존재하지 않는다면 i

answer는 {0, 0}의 int 배열로 초기화한다.s가 "1"이 될 때까지 반복문을 수행한다.1\. 반복문을 들어오면 이진 변환을 한 번 실행하는 것이기 때문에 answer0에 1을 더한다.2\. s의 0의 개수를 센다. string에서 특정 문자의 개수를 세기 위

숫자를 1부터 순서대로 리스트에 넣는다.숫자를 넣을 때마다 리스트의 합을 구한다.만약 리스트의 합이 n을 넘는다면 n을 넘지 않을 때까지 작은 수부터 순서대로 리스트에서 제거한다.만약 리스트의 합이 n과 동일하다면 answer에 1을 더한다.정확성 테스트에서는 만점을

먼저 배열에서 divisor로 나누어지는 수만 남긴 다음에 배열을 오름차순으로 정렬해야 한다.만약 배열의 길이가 0이라면 -1을 반환한다.stream을 이용하여 위의 코드를 구현하였다.

먼저 arr의 길이가 1이라면 -1을 반환한다.stream을 이용하여 arr의 가장 작은 수를 찾는다.stream을 이용하여 가장 작은 수를 제외한 수들을 이용하여 새로운 배열을 만든 후 그 배열을 반환한다.

먼저 (phone_number의 길이)-4만큼 \*을 문자열에 추가합니다.그 후에 phone_number의 (phone_number의 길이)-4 인덱스부터 마지막 인덱스까지의 값을 문자열에 추가합니다.

만약 짝수라면 (s 길이)/2-1 인덱스와 (s 길이)/2 인덱스의 값을 반환한다.만약 홀수라면 (s 길이)/2 인덱스의 값을 반환한다.

먼저 n을 binary로 바꾼 값에서 1의 개수를 구한다. (해당하는 개수를 count1OfN이라고 한다.)그 후에 n+1부터 숫자를 1을 더하는 것을 반복한다. (해당 숫자를 checkNum이라고 정의한다.)반복문 안에서는 checkNum을 binary로 바꾼 값이

F(n-2)의 값을 first라는 변수로 지정하고, F(n-1)의 값을 second라는 변수로 지정한다.먼저 first에 F(0) 값을 넣고 second에 F(1) 값을 넣는다.그 다음에는 F(2)부터 반복하며 아래를 실행한다.1\. answer에는 first와 sec

1번째 글자부터 n번째 글자까지 돌면서 짝수면 "박"을 answer에 추가하고 홀수면 "수"를 answer에 추가한다.
문제 로직 left부터 +1을 하며 right까지 반복문을 진행한다. 해당하는 수의 약수를 구한다. 약수의 개수가 짝수인 경우에는 answer에 해당하는 수를 더한다. 약수의 개수가 홀수인 경우에는 answer에 해당하는 수를 뺀다. 코드 결과
문제 첫 번째 풀이 (시간초과) 로직 문자열을 리스트로 변환한다. 리스트의 0 번째 인덱스부터 마지막 인덱스까지 반복문을 실행한다. 해당하는 인덱스의 값과 그 다음 인덱스의 값이 동일할 경우 두 값 모두 삭제하고 0 번째 인덱스부터 다시 반복문을 실행한다. 코드 결과 대부분 시간 초과가 났다. 2번째 풀이 로직 stack을 이용한다. 인덱스 0부터 ...

(brown-4)/2은 yellow의 (가로+세로)의 값과 동일하다.yellow의 (가로+2)(세로+2) = brown+yellow 와 동일하다.yellow의 (가로+세로)를 구한 다음에 세로가 1인 경우부터 가정하여 "yellow의 (가로+2)(세로+2) = brow

이 문제는 등차수열의 합 공식을 이용하여 자신이 내야 하는 금액을 구할 수 있다. 이를 통해 구한 값에서 money를 빼면 결과가 나온다.이 때 (price2 + (count-1)price) 값이 int의 범위를 벗어날 수 있으므로 앞에 (long)을 적어서 형 변환을

문제 로직 코드 결과

arr1과 arr2에서 동일한 인덱스에 있는 값들을 더한 후 answer의 동일한 인덱스에 저장해주면 된다.

'\*'을 a의 수만큼 찍고 마지막에는 개행 문자를 넣어 한 문자에 저장한다.해당 문자를 b의 수만큼 반복하여 출력한다.

현재까지 온 거리의 2배만큼 순간이동을 할 때에는 건전지를 소모하지 않으므로 N/2를 반복하면서 나머지가 1일 때에만 1을 더해주면 된다.
문제 코드 결과

문제 로직 먼저 배열을 정렬한 후 리스트로 바꾼다. 리스트가 빌 때가지 아래를 반복한다. 0번째 인덱스의 값을 min에 넣는다. 마지막 인덱스의 값을 max에 넣는다. 마지막 인덱스의 값을 삭제한다. min+max가 limit을 초과하지 않는다면 0번째 인덱스의 값도

먼저 최대 공약수를 구하기 위해서는 1부터 n까지의 수 중에서 n과 m에서 나누었을 때 둘 다 나머지가 0인 가장 큰 수를 구하면 된다.두 번째로 최소 공배수를 구하기 위해서는 m의 배수 중에서 n으로 나누었을 때 나머지가 0인 가장 작은 수를 구하면 된다.업로드중..

리스트를 생성하고 안에 배열의 첫번째 값을 넣는다.배열의 두번째 인덱스부터 순서대로 접근한다. 이전 수와 동일한 경우에는 그냥 넘어가고 이전 수와 다른 경우에는 리스트에 값을 넣는다.리스트를 배열로 변환하여 반환한다.

최대한 많은 부서에게 물품을 지원해주어야 하므로 신청한 금액이 적은 팀부터 지원해주어야 한다.먼저 배열을 정렬한 후에 첫번째 수부터 budget에서 뺀다. 만약에 budget이 0이 되거나 해당 수가 budget보다 크다면 그 전까지의 인덱스 값을 반환한다.

문제 로직 n을 3진법으로 변환하기 위해서 n을 3으로 나눈 나머지를 배열에 저장하고 해당 배열을 뒤집으면 된다. 문제의 조건이 n을 3진법으로 변환하고 그 수를 뒤집은 후 10진법으로 표현하는 것이다. 3진법으로 변환한 수를 다시 뒤집기 때문에 n을 3진법으로 변환

2칸의 개수를 jump라 하고 1칸의 개수를 walk라 하자.처음에는 jump = n/2 이고 walk = n%2이다.jump가 0이 될 때까지(jump+walk)!/(jump)!(walk)!위 식을 합에 더하고 jump -= 1 walk += 2 를 한다.위 식은 확

배열의 가장 큰 수의 배수 중, 배열의 가장 큰 수를 제외한 나머지 값들을 각각 나누었을 때의 나머지가 모두 0인 배수 중에서 가장 작은 수가 답이다.그래서 배열의 가장 큰 수부터 차례대로 배열의 가장 큰 수를 제외한 나머지 값들을 각각 나눈다. 모든 나머지가 0일 때

(t의 길이) - (p의 길이) + 1만큼 반복문을 수행한다.1\. 반복문의 i를 첫번째 인덱스로 하여 p의 길이만큼 자른다.2\. 자른 문자열을 p와 비교한다.3\. 더 작은 경우에 answer에 1을 더한다.a.compareTo(b)a와 b가 모두 문자열일 때,a가

문자열을 공백을 기준으로 배열로 나눈다. 그러면 단어의 수 길이의 문자열 배열이 만들어진다.문자열을 돌면서 각 문자열 안에서 짝수 번째 인덱스의 값은 대문자로 변경하고 홀수 번째 인덱스의 값은 소문자로 변경한다.배열을 다시 문자열로 합쳐서 반환한다.input: " T

첫 번째 수의 인덱스는 i라고 하고 0부터 (number 배열의 길이) - 3 까지 반복한다.두 번째 수의 인덱스는 j라고 하고 i+1부터 (number 배열의 길이) - 2 까지 한다.세 번째 수의 인덱스는 k라고 하고 j+1부터 (number 배열의 길이) - 1

max와 min을 0으로 초기화한다.sizes의 값을 하나씩 꺼내 아래를 반복한다.1\. 명함의 길이 중 큰 값이 max를 넘는다면 해당 값을 max에 저장한다.2\. 명함의 길이 중 작은 값이 min을 넘는다면 해당 값을 min에 저장한다.max\*min을 반환한다.

빈 리스트를 생성한다.단어 배열의 첫 번째 인덱스부터 아래 반복문을 실행한다.1\. 만약 전 단어의 마지막 글자와 현재 단어의 첫 번째 글자가 다르다면 (해당 인덱스)%3+1, (해당 인덱스)/3 +1를 반환한다.2\. 만약 리스트에 현재 단어가 존재한다며 (해당 인

참가자의 수는 무조건 2의 지수이다.참가자의 수를 반으로 나누었을 때 A와 B가 다른 묶음에 속한다면 참가자의 수의 2의 지수 값이 정답이다.예를 들어, 위의 예와 동일하게 8명의 참가자가 존재하고, A와 B가 각각 4와 7이라고 가정하자.8을 2로 나누었을 때, A는

A부터 Z까지, 그리고 a부터 z까지 대문자와 소문자를 각각 리스트에 저장한다.모든 문자를 돌면서 아래 반복문을 반복한다.먼저 공백이라면 공백을 answer에 더한다.대문자라면 대문자 리스트에서, 소문자라면 소문자 리스트에서 아래를 반복한다.암호화하고자 하는 문자가 어

첫 번째 글자는 무조건 -1을 넣어줍니다.두 번째 글자부터 순서대로 반복문으로 돕니다.자신의 바로 앞까지의 배열 안에 자신이 존재하는지 확인합니다만약 없다면 -1을 넣고 다음으로 넘어갑니다.만약 있다면 마지막 배열부터 순서대로 자신과 동일한지 확인하고 아니라면 앞으로

영단어 리스트를 문자열 배열로 저장한 후에 replaceAll() 함수를 이용하여 각 영단어에 맞는 숫자로 변환한다.

commands 배열 안의 1차원 배열에 순서대로 접근한다.array에서 1차원 배열의 첫 번째 숫자부터 2번째 숫자까지 자른다.자른 숫자 배열을 정렬한다.정렬한 배열에서 (1차원 배열의 3번째 숫자 - 1)을 인덱스에 있는 값을 결과 배열에 추가한다.

문제 로직 먼저 tangerine 배열을 정렬한다. cnt라는 새로운 List를 만든 후에 동일한 크기를 가진 귤의 개수를 세서 List에 넣는다. List를 역순으로 정렬한다. 인덱스 0의 값부터 순서대로 k에서 뺀 후 answer에 1을 더한다. k가 0 또는 0

문제 로직 원형 수열이기 때문에 배열을 2번 반복하여야 한다. 배열을 2번 반복한 것을 새로운 배열에 저장한다. 배열의 사이즈만큼 반복문을 실행한다. number를 1부터 number+i가 배열 사이즈의 2배가 되기 전까지 반복문을 실행한다. elements[i:nu

회전하였을 때 올바른 괄호 문자열인지 확인하고 올바른 괄호 문자열의 개수를 Return 하는 문제입니다.만약 문자열의 길이가 홀수라면 올바른 괄호 문자열이 존재할 수 없으므로 0을 Return합니다.(괄호의 수-1)만큼 회전하면서 회전한 문자열이 올바른 괄호 문자열인지

이 문제는 먼저 제품과 개수가 하나로 묶여야 한다. 먼저 HashMap을 이용하여 제품과 개수를 하나로 묶는다.discount의 값을 순서대로 꺼내어 다음을 실행한다.해당 값이 맵에 존재하지 않으면 다음으로 넘어간다.해당 값이 맵에 존재하면 해당 값의 value에서 1

이 문제는 문제 카테고리에도 있듯이 동적계획법(Dynamic Programming)을 이용하는 문제이다.삼각형은 무조건 아래보다 길이가 1 작기 때문에 내려갈 때에는 자신과 동일한 인덱스 또는 자신보다 1 큰 인덱스 중 하나를 선택할 수 있다.맨 아랫줄에서 한 칸 위부

먼저 빈 리스트를 하나 만들어준다.그 후에 operation을 순서대로 실행하는 반복문 안에서 명령어에 따라 주어진 기능을 실행하면 된다.

행렬 곱은 다음과 같이 계산해야 한다.행렬곱을 통해 나온 사이즈는 다음과 같다.row는 첫번째 행렬의 row의 size와 동일하다.column은 두번째 행렬의 column의 size와 동일하다.행렬곱은 arr1row와 arr2...의 모든 곱셈 결과를 합산하여 answ

결론부터 말하자면 left부터 right의 인덱스까지의 값을 배열로 출력하는 문제다.먼저 left와 right 사이의 수들이 각각 어느 행과 열을 가지는지 먼저 알아낸 후에 각 행과 열이 가지는 값들을 알아내면 된다.left와 right 사이의 수들을 순서대로 조회하고

dfs를 사용하여 문제를 풀었다.먼저 1번부터 순서대로 방문한다.아직 방문하지 않은 노드라면 dfs 재귀 함수를 실행한다.1과 연결되어 있는 노드들부터 연결되어 있는 모든 노드를 순서대로 방문한다. 방문한 후에는 방문한 표시를 한다.방문 가능한 모든 노드를 방문한 후에

야근 지수는 각 일의 제곱으로 쌓이기 때문에 각 작업의 작업량을 낮춰야 한다.그러므로 n이 하나 없앨 때마다(한 시간이 지날 때마다) works에서 가장 큰 수에서 1을 뺀다.그 후에 남은 works들의 각각의 값의 제곱을 더한 값을 반환한다.문제는 모두 맞았으나 효율

먼저 citations를 정렬한다. answer에는 citations의 길이를 저장한다.그 다음에 순서대로 citations의 값을 조회한다.citations의 값이 answer보다 작다면 answer에서 1을 뺀다.만약 citations의 값이 answer와 동일하거

이 문제는 queue를 이용하여 풀 수 있다.queue에 해당하는 값이 없는데 queue의 길이가 캐시 크기와 동일할 경우에는 첫 번째 들어간 값을 제거해준다. 그 후에 해당하는 값을 queue에 추가해준다. 이는 cache miss로 처리한다.queue에 해당하는 값

문제 풀이 코드 결과

(m+1) x (n+1) 크기의 2차원 배열을 생성한다.물이 잠긴 위치는 -1로 저장한다.시작 위치부터 column을 하나씩 더하면서 왼쪽(row, col-1)과 위(row-1, col)를 더한 값을 저장한다. 만약에 현재 위치가 물에 잠긴 경우에는 0으로 저장하고 넘

먼저 Map을 이용해서 의상을 종류별로 몇 개 있는지 분류한다.해당 종류를 안 입는 경우도 있으므로 각 종류의 개수에 1을 더한 값을 모두 곱한다.모든 종류를 하나도 안 입는 경우는 없으므로 1을 뺀다.

progresses를 순서대로 접근한다.시작할 때 max를 첫 progress가 완료되는데 걸린 일자로 하고 progress를 하나 지날 때마다 완성하는데 며칠이 걸렸는지 체크한다. 해당 일자가 max보다 크다면 그 전까지의 count를 저장하고 다시 1부터 센다.모든

이 문제는 집합 안에 있는 원소들의 차이가 가장 적을 때 곱이 가장 크다.그래서 합을 이용해서 모든 수를 고르게 분배해야 한다.먼저 s/n 한 값을 n만큼 가지고 있는다.그 다음에 (s/n + s%n)만큼의 개수는 s/n+1이다. s/n+1개만큼 (s/n + s%n)를

먼저 두 배열 모두 정렬한다.B의 배열을 순서대로 접근하면서 A의 배열 첫 번째에 접근한다.만약 현재 B의 값이 A의 값보다 크다면 A의 배열 다음 값에 접근한다.만약 현재 B의 값이 A의 값보다 작거나 같다면 A의 배열 값은 유지한다.모든 경우에 B의 값은 한 번 진

문제 풀이 코드 결과

먼저 앞 뒤의 중괄호 두 개씩은 빼준다.그 다음에 "},{"로 분리해서 저장한다. 그렇게 하면 괄호 안의 값들이 각각 따로 저장될 수 있다.그 다음에 괄호 안의 숫자들도 중간 ","를 없애주면 숫자가 모두 따로 배열로 들어갈 수 있다.그 다음 배열의 길이를 기준으로 정

이 문제는 앞 차량의 진출 지점이 뒷 차량의 진입 시점보다 뒤에 있으면 한 대의 카메라만 사용해도 된다.이 원리를 이용해서 routes를 진출 지점을 기준으로 정렬한다.첫 번 째 route의 진출 지점에 먼저 카메라 하나를 둔다.그 다음 route에 순차적으로 접근하면

먼저 w 길이를 이용해서 하나의 기지국의 총 전파 길이를 저장한다.설치된 기지국을 기준으로 현재 위치부터 설치된 기지국까지 기지국의 전파가 닿지 않는 곳이 있다면 (전파가 닿지 않는 길이 / 총 전파 길이)만큼 기지국을 설치한다. 만약에 0으로 나누어 떨어지지 않는 경

오름차순으로 정렬한다.접두어가 존재한다면 오름차순으로 정렬 시에, 두 수는 무조건 인접해서 존재할 것이다.두 수를 하나씩 대입해본다.두 수를 가져와서 더 작은 수의 길이만큼 첫 번째 숫자부터 하나씩 대입해본다. 만약 모든 수가 같다면 false를 반환한다.2번 과정을

문제 풀이 코드 결과