반응형

Java 125

[프로그래머스] n^2 배열 자르기 - JAVA

프로그래머스 n^2 배열 자르기 - JAVA 문제 설명 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다. 정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution..

[프로그래머스] 문자열 압축 - JAVA

프로그래머스 문자열 압축 - JAVA 문제 설명이 너무 길어 생략 [문제 보기] : https://programmers.co.kr/learn/courses/30/lessons/60057 문제 풀이 문자열의 길이를 n이라고 할 때 문자열을 1부터 n/2까지 쪼개며 압축시킨 경우를 전부 확인해봐야하는 완전탐색 유형의 문제이다. 단위별로 총 압축했을 때의 문자열 길이에 압축이 1이상 가능한 경우 압축했을때의 문자열 길이를 더하는 방식으로 단위별 길이를 구할 수 있다. 문자열 s를 순회하며 단위별로 짤라 비교하며 압축 여부를 찾아 길이를 구하는 방식이다. 저처럼 반복횟수가 1인 경우 자르는 길이만큼 더하고, 그 이상인 경우 자르는 길이와 반복 횟수(10이상인경우 2칸 차지하므로 생각해서 더해야 한다)의 길이를 ..

[프로그래머스] 직사각형 별찍기 - JAVA

프로그래머스 직사각형 별찍기 - JAVA 문제 설명 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수입니다. 소스 코드 import java.util.Scanner; class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < b; i++) { for (int..

[프로그래머스] x만큼 간격이 있는 n개의 숫자 - JAVA

프로그래머스 x만큼 간격이 있는 n개의 숫자 - JAVA 문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 문제 풀이 제한 조건의 x의 최대값과 n의 최대값으로 계산해보면 int의 범위를 넘는것을 알 수 있다. 문제에 주어진 answer 배열의 타입이 long인 것을 보고 예상했듯이 int형으로 계산하면 마지막 2개의 테스트에서 int 범위를 초과해 틀렸다고 나온다. 꼭 answer배열에 저장할 때 long타입으로 변환하..

[프로그래머스] 행렬의 덧셈 - JAVA

프로그래머스 행렬의 덧셈 - JAVA 문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 문제 풀이 문제 설명을 읽어보면 arr1과 arr2그리고 return하는 배열의 크기가 모두 동일하다는 것을 알 수 있다. i를 arr1의 길이와 j를 arr1[0]길이만큼 반복하면 arr1과 arr2의 모든 수를 순회할 수 있다. 별도의 배열을 만들 필요없이 arr1에 arr2의 값을 더하고 arr1를 return. 소스 코드 class Solution { publ..

[프로그래머스] 핸드폰 번호 가리기 - JAVA

프로그래머스 핸드폰 번호 가리기- JAVA 문제 설명 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 4 이상, 20이하인 문자열입니다. 문제 풀이 문자열 phone_number를 변경하거나 문자열을 만들어 더하기 연산을 하면 메모리 사용 비용이 커 StringBuilder를 이용. 전화번호 뒷 4자리 이전까지의 길이를 반복하며 *을 추가. 뒷 4자리를 sbustring()함수를 통해 추가. 소스 코드 class Solution { public String s..

[프로그래머스] 하샤드 수 - JAVA

프로그래머스 하샤드 수 - JAVA 문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 조건 x는 1 이상, 10000 이하인 정수입니다. 문제 풀이 x를 마지막에 하샤드 수인지 검사할 때 사용해야 하므로 자리수를 구하며 변경되면 안되므로 n에 x값을 저장. n 이 0이 되기 전까지 각 자리수를 sum에 더하고 나누기 10을 하여 자리수를 이동. x가 자리수의 합으로 나누어지는지 나머지 연산으로 검사 후 리턴. 소스 코드 class Solution { public b..

[프로그래머스] 콜라츠 추측 - JAVA

프로그래머스 콜라츠 추측 - JAVA 문제 설명 입력된 수가 짝수라면 2로 나눕니다. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 결과로 나온 수에 1 ~ 2 작업을 1이 될 때까지 반복합니다. 제한 사항 입력된 수, num은 1 이상 8000000 미만인 정수입니다. 문제 풀이 입력으로 주어진 num을 가지고 작업을 반복하다 보면 int범위를 초과하는 경우가 발생(ex 테스트 케이스 3)하기 때문에 long type으로 입력을 변경. 작업을 반복할때마다 answer를 증가시키므로 while 조건문에서 num이 1이 될 때까지 그리고 answer가 500되기 전까지로 설정한다. while 조건문을 만족할때까지 문제 설명의 1~2작업을 반복한다. 작업 횟수가 500이 넘는지 비교하고 넘는경우 -1을,..

[프로그래머스] 최대공약수와 최소공배수- JAVA

프로그래머스 최대공약수와 최소공배수- JAVA 문제 설명 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성하라. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환. 제한 사항 두 수는 1이상 1000000이하의 자연수입니다. 문제 풀이 최대공약수를 찾기 위해서 유클리드의 호제법을 사용한다. 유클리드의 호제법을 사용하기 위해 두 수 중 큰 수와 작은 수를 찾아 저장. 재귀함수 gcd()를 사용하여 최대공약수를 찾는다. 최소공배수는 두 수를 곱한뒤 최대공약수를 나눔으로 찾을 수 있다. 소스 코드 class Solution { publi..

반응형