이 문제는 입력에 4<n<1000 범위 안에 있는 4의 배수가 입력으로 들어옵니다. 또한 출력은 다음 사진과 같이 입력의 수를 4로 나누었을때 나오는 몫만큼 long을 출력하고 마지막에 int를 붙여야합니다.

출력 예시 -- 백준

그럼 우선 입력을 받기전 어떤 식으로 문제를 풀어야할지 생각해보아야합니다.

첫 번째로 입력된 값을 저장하는 변수가 있어야합니다.

 

두 번째로 for문의 작동 횟수를 조절해주는 값을 구해서 변수로 이용하면 편리할 것입니다.

세 번째로 출력할 값을 저장하는 문자열 변수가 존재해야합니다.

네 번째로 long이라는 값이 반복되기 때문에 for문을 이용하여 변수에 반복적으로 값을 삽입합니다.

 

순서대로 한번 작문해보겠습니다.

 

첫 번째로 입력값을 받고 그 값을 변수에 저장하겠습니다.

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 값을 받는 객체
int n = sc.nextInt();//바이트의 값이 들어온다;
}

스캐너 객체를 통해 몇 바이트를 계산할 것인지 정수형 데이터로 입력을 받고, 그 값을 정수형 변수에 저장해놓습니다.

 

두 번째로 입력한 값을 4로 나누어 long 을 몇번 출력해야 하는지 숫자를 계산하여 변수에 저장합니다. 이 변수는 후에 반복(for)문에서 사용 될 것입니다.

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 값을 받는 객체
int n = sc.nextInt();//바이트의 값이 들어온다;

int num = n / 4;// long을 찍어야하는 횟수를 계산하여 저장한다.
}

int num을 통해 n에 값이 20이 들어온다면 5가 들어올 것입니다. 그럼 이 변수를 for문에 삽입하여 for문이 5번 작동하도록 할 수 있을 것입니다.

 

세 번째로 출력해야하는 문자열 값을 저장하는 변수를 만들어줍니다.

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 값을 받는 객체
int n = sc.nextInt();//바이트의 값이 들어온다;

int num = n / 4;// long을 찍어야하는 횟수를 계산하여 저장한다.

String word = ""; // 문장을 저장하는 변수를 가진다.
}

String word를 선언하고 우선 공백을 값으로 지정해줍니다. 이 변수가 마지막에 정답으로 출력될 것입니다.

 

네 번째로 for문을 통해 계산된 횟수만큼 word변수에 long을 추가합니다.

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 값을 받는 객체
int n = sc.nextInt();//바이트의 값이 들어온다;

int num = n / 4;// long을 찍어야하는 횟수를 계산하여 저장한다.

String word = ""; // 문장을 저장하는 변수를 가진다.

for (int i = 0; i < num; i++) {
word += "long ";// for문을 돌면서 4비트마다 long을 하나씩 저장한다.
}
}

해당 for문을 통해 num에 저장된 수만큼 long이 word변수에 추가되어 저장될 것입니다. 이제 거의 마지막 단계입니다.

하지만 위 출력 예시를 잘 보시면 long과 long, long과 int사이엔 모두 띄어쓰기가 한칸 씩 존재합니다. 따라서 for문에서 값을 삽입할 때 long 뒤에 반드시 띄어쓰기 한칸을 넣어주셔야 요구하는 답이 나오게됩니다.

 

이젠 마지막으로 for문뒤에 int를 삽입하고 그 값을 출력합니다.

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 값을 받는 객체
int n = sc.nextInt();//바이트의 값이 들어온다;

int num = n / 4;// long을 찍어야하는 횟수를 계산하여 저장한다.

String word = ""; // 문장을 저장하는 변수를 가진다.

for (int i = 0; i < num; i++) {
word += "long ";// for문을 돌면서 4비트마다 long을 하나씩 저장한다.
}

word += "int"; //문장의 마지막에 int를 붙인다.
System.out.println(word);//제대로 출력이 되는지 확인한다.
      }
}

한번 콘솔에서 20을 찍고 long이 5번 출력되고 int가 정확하게 출력되는지 테스트해보겠습니다.

테스트 콘솔 창

보시면 값을 20을 입력했을 때 long이 5번 출력되고, 마지막에 int가 정상적으로 출력되는 것을 알 수 있습니다.

 

부연설명

20의 값을 콘솔에 입력하면 변수 n에는 20이 저장되고, 변수 num에는 20을 4로 나눈 몫인 5가 저장됩니다.

그럼 for문에서 i는 0부터 num보다 작을 때까지만 실행하게 되어있기 때문에 0, 1, 2, 3, 4 총 5회가 동작되면서 

문자열 변수 word에는 "long "이 총 5번 더해지고 for문의 동작이 종료됩니다. 이후 변수 word에 int가 마지막에 출력됨으로서 모든 값을 다 구한 이후 System.out.println을 통해 출력하여 답변을 제출합니다.

 

위 코드를 제출하여 정답을 맞춘 사진입니다.

아마 buffer를 이용하면 좀 더 빠르게 방법을 구현할 수 있다고 하는데 다음에 한번 해봐야겠습니다.

모자란 글 봐주셔서 감사합니다.

'백준' 카테고리의 다른 글

백준 2439번 - 별 찍기-2  (0) 2023.02.02
백준 11022번 A+B-8  (0) 2023.01.03

자바 숫자열 분리하기

이제 학원에서 곧 프로젝트를 들어가면 더욱 바빠질까봐 코딩테스트를 하나씩이라도 해보려고 합니다.

오늘은 프로그래머스에서 레벨 0짜리 숫자열 분리를 해야하는 문제를 풀었는데, 알고리즘을 떠올려 본적이 없다시피하다보니 한참을 돌고돌아 풀었습니다.

그리고 다른 분들의 풀이를 보니 아주 쉬운 개념이었어서 까먹지 않기 위해 이 글을 작성했습니다.

 

우선 예시를 바로 들고 하나하나 설명해보겠습니다.

 

예시 ) 12345의 숫자를 하나하나 분리하여 역순으로 배열에 저장하세요.

답 : numArray = {5,4,3,2,1};

 

소스 코드

int n = 12345;	// 분리해야하는 숫자
String str = "" + n;	// 12345 문자열 변환
int[] numArray = new int[str.length]	// 배열의 크기 지정


for(int i=0; i < str.length; i++){
	numArray[i] = n%10;
    n = n/10;
}

 

설명

우선 변수 n은 분리해야하는 숫자이므로 따로 설명하지 않겠습니다. 문자형 변수 str은 배열을 선언하고 값을 넣을때, 해당 숫자의 길이 만큼 인덱스가 필요하므로 정수형 변수 n을 문자열로 변경하여 문자열의 길이로 배열의 크기와 반복문의 반복횟수를 지정했습니다. 여기서 문자열 str 의 길이와 숫자 n의 자릿수가 같다는 것을 알아야합니다. 

 

그 다음 부분은 반복문 부분입니다. 숫자를 하나하나 떼어내어 역순으로 배열에 저장하는 부분이라고 생각하시면 됩니다.

이부분 역시 세분화하여 살펴보겠습니다.

numArray[0] = n%10;

여기서 n%10을 보시면 어떤 수여도 10으로 나누면 마지막 자릿수가 나머지로 나오는 것을 알 수 있습니다.

 

이후 n/10를 출력하면 마지막 자리수를 버림하는것을 확인할 수 있습니다.

n/10

위 작업을 반복 실행하면 1234에서 4가 나머지로 나와 배열에 삽입되고, n/10을 들리면 123, 다음 반복때는 123에서 3이 나머지이기 때문에 배열에 삽입되고 n/10에서 12...... 를 반복하면 각 숫자열을 분리하여 관리하는 것 입니다.

 

for문만 다음과 같이 변경하면 자릿수대로 배열에 저장할 수 있습니다.

int n = 12345;	// 분리해야하는 숫자
String str = "" + n;	// 12345 문자열 변환
int[] numArray = new int[str.length]	// 배열의 크기 지정


for(int i=str.length-1; i >= 0; i--){
	numArray[i] = n%10;
    n = n/10;
}


for (int i = 0; i < numArray.length; i++) {
	System.out.println(numArray[i]);
} // 출력문~~

위 결과를 출력해보겠습니다.

보시는 것처럼 숫자의 자릿수 순서대로 출력된 것을 확인할 수 있습니다.

 

오늘의 느낀점

코딩테스트를 전에도 준비하려했지만 혼자하기 쉽지 않았습니다. 새로운 분야를 하려고 하니 어떤 것을 어떻게 공부해야할지도 몰랐었습니다. 오늘 이번 문제를 계기로 어떻게 공부해야하는지 길이 트여진거 같아 속이 후련합니다.

혹시나 이 글을 보시게 되는 다른 분들도 화이팅하시길바랍니다.

'JAVA' 카테고리의 다른 글

[JAVA, JS]프로그램 변수란?  (0) 2023.07.05
[JAVA] JAVA와 객체지향 언어의 특징  (0) 2023.07.04
[TESTCode] AssertJ 빌드툴 추가 및 적용법  (0) 2023.07.03
AssertJ에 대하여  (0) 2023.04.24
Junit에 대하여  (0) 2023.04.24

+ Recent posts