728x90
반응형

문제

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. (n은 10,000,000,000이하인 자연수입니다.)

 

 

Solution 코드

class Solution {
    public long[] solution(long n) {
        long temp=n; //n은 10,000,000,000이하인 자연수이기 때문에 int가 아닌 long
        int count=0;
        
        //배열의 크기를 정하기 위함
        for(;temp>0;){
            temp /= 10;
            count++;
        }
        
        long[] answer = new long[count];
        
        for(int i=0;n>0;i++){
            answer[i]=n%10;
            n /= 10;
        }
        
        return answer;
    }
}
  • n은 10,000,000,000이하인 자연수이기 때문에 int가 아닌 long으로 선언된다.
  • 배열의 크기를 정하기 위해서 count 변수를 이용하여 자리값을 구한다. n이 12345이면 temp는 1234→123→12→1→0 순으로 반복되어 count는 5가 된다.
  • n이 12345일 때 [5,4,3,2,1]을 리턴하기 위해서, n을 10으로 나누었을 때의 나머지 값을 배열에 넣고 10을 나눈 값으로 다음 반복문을 실행한다. 12345를 10으로 나눈 나머지는 5이고, 12345를 10으로 나눈 값은 1234이다. 1234를 10으로 나눈 나머지는 4이고, 1234를 10으로 나눈 값은 123이다. 이 행위를 0이 될 때까지 반복한다.
  • n의 값이 0이 되면 더 나눌 수 없다는 것을 의미하기 때문에 반복을 종료한다.
728x90
반응형

'문제 > JAVA' 카테고리의 다른 글

[JAVA] 문자열을 정수로 바꾸기  (2) 2023.05.29
[JAVA] 문자열 내 p와 y의 개수  (0) 2023.05.29
[JAVA] x만큼 간격이 있는 n개의 숫자  (0) 2023.05.29
[JAVA] 약수의 합  (0) 2023.05.29
[JAVA] 옹알이  (0) 2023.05.28
728x90
반응형

문제

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

입력 출력
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3

 

▶ 제한사항

  • 문자열은 알파벳 소문자로만 이루어져 있습니다.
  • 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
  • ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
  • ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.

 

 

Solution 코드

class Solution {
	public int solution(String[] babbling) {
		int answer = 0;
		String[] baby={"aya","ye","woo","ma"}; //할 수 있는 네 가지 발음
	
		for(int i=0;i<babbling.length;i++){
			int pass=0;	//발음이 완벽히 일치하면 바로 다음 babbling으로 넘어가기 위함
			
			//발음과 할 수 있는 발음과 완벽히 일치하는지 확인
			for(int j=0;j<baby.length;j++)
				if(babbling[i].equals(baby[j])){
					answer++;
					pass=1;	//일치
					break;
				} 

			//네 가지의 발음이 일치하는지 확인
			if(pass==0){
				int check=babbling[i].length();	//발음할 수 있는지 확인할 단어의 길이
				int check2=0;	//일치하는 단어의 길이 확인
				
				for(int k=0;k<baby.length;k++){
					if(babbling[i].contains(baby[k]))	//할 수 있는 발음이 있는지 확인
						check2 += baby[k].length();	//할 수 있는 발음의 길이를 더함					
				
				//할 수 있는 발음의 수가 일치하면 모두 발음할 수 있다는 것을 의미한다
				if(check == check2)
					answer++;
			}//if_end
		}//babbling_for_end
		
		return answer;
	}
}
  • babbling의 발음이 할 수 있는 네 가지의 발음과 정확하게 일치하는지 확인하고, 일치한다면 break를 이용해 다음 배열을 비교한다.
  • 정확하게 일치하지 않는다면 babbling의 발음이 네 가지 발음을 조합한 것인지 확인한다.
  • babbling의 발음의 길이를 check에 넣고, baby의 발음과 일치하면 일치한 길이만큼 check2에 더한다. check와 check2의 값이 동일하다면 babbling은 baby에 들어 있는 발음으로만 구성된 것임을 의미한다.

 

 

 

main 코드

		String[] babbling1={"aya", "yee", "u", "maa", "wyeoo"};
		String[] babbling2={"ayaye", "uuuma", "ye", "yemawoo", "ayaa"};

		Solution s = new Solution();

		/*출력*/
		int answer=s.solution(babbling1);
		System.out.println(Arrays.toString(babbling1)+" - "+answer);

		answer=s.solution(babbling2);
		System.out.println(Arrays.toString(babbling2)+" - "+answer);

 

 

 

출력 결과

[aya, yee, u, maa, wyeoo] - 1
[ayaye, uuuma, ye, yemawoo, ayaa] - 3

 

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 선택 정렬과 버블 정렬

2. 구구단 3,6,9단만 출력하기

3. 배열을 출력하되 홀수는 음수로 출력하기

4. 홀수/짝수 평균 구하기

5. 최댓값과 최솟값 차이 구하기

 

 

1. 선택 정렬과 버블 정렬

▶ 실습 내용

 

[JAVA] 선택 정렬과 버블 정렬

1. 선택 정렬 ▶ 코드 /*선택정렬*/ int[] arr={9,6,7,3,5};//정렬할 배열 int index, min, temp;//최솟값이 들어있는 인덱스 변수, 최솟값을 비교할 변수, 값을 변경할 때 사용할 변수 for(int i=0;i6? index=j;//index=1

deliciouscode.tistory.com

 

 

 

2.  구구단 3, 6, 9단만 출력하기

▶ 코드

		for(int i=3; i<=9; i+=3){
			System.out.println("<"+i+"단>");
			
			for(int j=1; j<=9; j++){
				System.out.println(i + "*" + j + "=" + (i*j));
			}
			System.out.println();	//줄바꿈
		}

 

▶ 출력 결과

<3단>
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27

<6단>
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54

<9단>
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81

 

 

 

3.  배열을 출력하되 홀수는 음수로 출력하기

  •  6개의 숫자를 입력받아 배열에 저장해라. 만약 입력받은 숫자가 홀수일 경우 음수로 바꿔 저장한다.

 

▶코드

		Scanner scan = new Scanner(System.in);
		int arr[] = new int[6];

		for(int i=0; i<6; i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요:");
			int num = scan.nextInt();

			if(num%2 != 0){	//홀수
				arr[i] = -num;
			} else {	//짝수
				arr[i] = num;
			}
		}
		System.out.println(Arrays.toString(arr));

		scan.close();

 

▶출력 결과

1번째 숫자를 입력하세요:1
2번째 숫자를 입력하세요:2
3번째 숫자를 입력하세요:3
4번째 숫자를 입력하세요:4
5번째 숫자를 입력하세요:5
6번째 숫자를 입력하세요:6
[-1, 2, -3, 4, -5, 6]

 

 

 

4. 홀수/짝수 평균 구하기

  • 배열 {15, 22, 33, 50, 19, 2}의 홀수들의 평균과 짝수들의 평균을 각각 구하시오.

 

▶코드

		int arr[] = {15, 22, 33, 50, 19, 2};
		
		int oddSum = 0; //홀수 합
		int oddCnt = 0;	//홀수 갯수
		
		int evenSum = 0; //짝수 합
		int evenCnt = 0; //짝수 갯수
		
		for(int num : arr){
			if(num % 2 == 0){
				evenSum += num;
				evenCnt++;
			}//짝수
			else {
				oddSum += num;
				oddCnt++;
			}//홀수
		}
		
		System.out.printf("홀수 평균:%.2f\n", (double)oddSum/oddCnt);
		System.out.printf("짝수 평균:%.2f\n", (double)evenSum/evenCnt);

 

▶출력 결과

홀수 평균:22.33
짝수 평균:24.67

 

 

 

5.  최댓값과 최솟값 차이 구하기

  • 배열 {40, -20, -30, -10, 50} 에서 가장 큰 수와 가장 작은 수의 차이를 구하라.
  • 단, 음수는 절대 값으로 계산하라.
  • ex) 가장 큰 수 : 50, 가장 작은 수 : -10 => 결과 40

 

▶코드

		int arr[] = {40, -20, -30, -10, 50};
		int max = Math.abs(arr[0]);
		int min = Math.abs(arr[0]);
		
		for(int i=0; i<arr.length; i++){
			max = Math.max(max, Math.abs(arr[i]));
			min = Math.min(min, Math.abs(arr[i]));
		}
		
		System.out.println("arr 배열에서 가장 큰 수와 가장 작은 수의 차이(음수는 절댓값으로 계산):"+(max-min));

 

▶출력 결과

arr 배열에서 가장 큰 수와 가장 작은 수의 차이(음수는 절댓값으로 계산):40

 

 

 

 

 


2023년 5월 26일 금요일

<11일차 수업 후기>

아직은 for(;;)문이 더 익숙하지만 파이썬을 조금 공부해서 그런지 for(:) 문도 어렵지 않게 작성할 수 있었다. 같은 알고리즘이라도 언어마다 작성법이 다르지만, 하나의 언어를 공부한다면 다른 언어를 공부할 때 도움이 많이 된다고 생각했다.

나는 C언어를 주로 공부하고 사용했던 터라 자바의 메소드나 함수는 자주 사용해보지 않았는데, Arrays와 Math 함수를 사용하면 코드가 더 간결해져서 코드를 읽기 편했다. 조금 더 학습하고 연습해서 지금보다 간결하고 깔끔한 코드를 작성하고 싶다.

728x90
반응형
728x90
반응형

 

 

[JAVA] 선택 정렬과 버블 정렬

1. 선택 정렬 ▶ 코드 /*선택정렬*/ int[] arr={9,6,7,3,5};//정렬할 배열 int index, min, temp;//최솟값이 들어있는 인덱스 변수, 최솟값을 비교할 변수, 값을 변경할 때 사용할 변수 for(int i=0;i6? index=j;//index=1

deliciouscode.tistory.com

 

 

선택 정렬 보완

▶ 첫 번째 실습을 보완하여 값을 출력해 보자

  • 최솟값을 저장하는 min변수를 없애고 인덱스 값만 이용해도 정렬이 가능하여, 위 실습 내용을 보완하였다.
		int[] arr={4,5,9,3,6};	//정렬할 배열
		System.out.println("초기 배열:"+Arrays.toString(arr)+"\n");
		int index, temp;	//최솟값이 들어있는 인덱스 변수, 값을 변경할 때 사용할 변수

		for(int i=0;i<arr.length-1;i++){	//배열의 수가 5개이면 4번만 비교하면 된다.
			index=i;	//0
			for(int j=i+1;j<arr.length;j++){	//맨 앞에 최소값을 넣기때문에 i+1부터 비교하면 된다.
				if(arr[index]>arr[j]){
					index=j;
				}
			}

			/*최솟값이 들어있는 인덱스와 자리 변경*/
			if(i != index){
				temp=arr[i];
				arr[i]=arr[index];
				arr[index]=temp;
			}
			System.out.println((i+1)+"번째 정렬:"+Arrays.toString(arr));			
		}
		System.out.println();//줄바꿈

		System.out.println("선택 정렬된 배열:"+Arrays.toString(arr));//배열 출력

 

 

▶ 출력 결과

초기 배열:[4, 5, 9, 3, 6]

1번째 정렬:[3, 5, 9, 4, 6]
2번째 정렬:[3, 4, 9, 5, 6]
3번째 정렬:[3, 4, 5, 9, 6]
4번째 정렬:[3, 4, 5, 6, 9]

선택 정렬된 배열:[3, 4, 5, 6, 9]

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 구구단 역순 출력

2. 구구단 정답 맞히기

3. 정수형 배열에 들어있는 값만큼 별 출력

4. 배열의 최솟값 구하기

5. 양수의 최솟값 구하기

6. 절댓값 구하기

7. UP&DOWN

 

 

1. 구구단 역순 출력

▶ 구구단을 9단부터 2단까지 역순으로 출력해 보자.

		System.out.println("<구구단(9단~2단)>");
		for(int i=9;i>1;i--){
			System.out.printf("%d단 : \t",i);
			for(int j=9;j>0;j--){
				System.out.printf("%d*%d=%2d\t", i, j,i*j);
			}
			System.out.println(); //줄바꿈
		}

 

▶ 출력 결과

<구구단(9단~2단)>
9단 : 	9*9=81	9*8=72	9*7=63	9*6=54	9*5=45	9*4=36	9*3=27	9*2=18	9*1= 9	
8단 : 	8*9=72	8*8=64	8*7=56	8*6=48	8*5=40	8*4=32	8*3=24	8*2=16	8*1= 8	
7단 : 	7*9=63	7*8=56	7*7=49	7*6=42	7*5=35	7*4=28	7*3=21	7*2=14	7*1= 7	
6단 : 	6*9=54	6*8=48	6*7=42	6*6=36	6*5=30	6*4=24	6*3=18	6*2=12	6*1= 6	
5단 : 	5*9=45	5*8=40	5*7=35	5*6=30	5*5=25	5*4=20	5*3=15	5*2=10	5*1= 5	
4단 : 	4*9=36	4*8=32	4*7=28	4*6=24	4*5=20	4*4=16	4*3=12	4*2= 8	4*1= 4	
3단 : 	3*9=27	3*8=24	3*7=21	3*6=18	3*5=15	3*4=12	3*3= 9	3*2= 6	3*1= 3	
2단 : 	2*9=18	2*8=16	2*7=14	2*6=12	2*5=10	2*4= 8	2*3= 6	2*2= 4	2*1= 2

 

 

 

2. 구구단 정답 맞히기

▶ 실습 내용

 

[JAVA] Random 함수를 이용한 구구단 답 맞추기

문제 ▶ Random 함수를 이용한다. ▶ 무한 반복문을 이용한다. ▶ 몇 문제를 풀 것인지 입력 받고, 입력 받은 숫자만큼 문제를 출력한다. ▶ 정수형 변수 num1과 num2에 랜덤 값을 넣는다. ▶ num1의 값

deliciouscode.tistory.com

 

 

 

3. 정수형 배열에 들어있는 값만큼 별 출력

▶ 코드

		int arr[]={3, 5, 1, 2, 3};

		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i];j++){
				System.out.print("*");
			}
			System.out.println(); //줄바꿈
		}

 

▶ 출력 결과

***
*****
*
**
***

 

 

 

4. 배열의 최솟값 구하기

▶ 코드

		int arr[]={4,3,5,2,1};
		int min=arr[0];//최솟값
		
		
		for(int i=1;i<arr.length;i++){
			if(min>arr[i])	//min=Math.min(min, arr[i]); 값 두개를 비교하여 최솟값을 구하는 함수를 사용하여 같은 결과를 가져올 수 있다.
				min=arr[i];
		}
		System.out.println("배열 arr의 최솟값:"+min);

 

▶ 출력 결과

배열 arr의 최솟값:1

 

 

 

5. 양수의 최솟값 구하기

▶ 코드

		//arr 배열에 들어있는 값 중 양수의 최솟값을 구하시오
		int arr[]={4, -3, 5, -2, 1, -8, 7, -9};
        
		int i; //배열의 첫 번째 양수의 위치를 알기 위한 변수
		int min; //양수보다는 큰 수를 찾는다.

		for(i=0;;i++){
			if(arr[i]>0){	//첫 번째 배열의 값이 양수가 아닐 수 있기 때문에 양수인 첫 번째 값을 찾아 min에 넣기
				min=arr[i];
				break;
			}
		}

		//양수인 arr[i]가 현재의 min값임으로 arr[i+1]배열부터 비교
		for(int j=i+1;j<arr.length;j++){
			if(arr[j]>0){ //arr[j]의 값이 양수일 때만 비교
				if(min>arr[j])
					min=arr[j];
			}
		}

		System.out.println("배열 arr의 양수의 최솟값:"+min);

 

▶ 출력 결과

배열 arr의 양수의 최솟값:1

 

 

▷ 코드 보완

  • 위 코드는 아래 코드로 간단하게 표현할 수 있다.
		int min=arr[0];
		for(int k=1;k<arr.length;k++){
			if(arr[k]>0 && min>arr[k]){
				min=arr[k];
			}
		}

 

 

 

6. 절댓값 구하기

▶ 코드

		int arr[]={4, -3, 5, -2, 1, -8, 7, -9};

		//모든 숫자의 합을 구하되 음수는 절대값을 구해 더하시오
		int sum=0;
		for(int i=0;i<arr.length;i++){ //sum+= Math.abs(arr[i]); 절댓값 구하는 함수와 같은 결과를 가진다.
			if(arr[i]<0) //음수는 절댓값을 더함
				sum+= -arr[i];	//sum+= (arr[i]*(-1));
			else //양수
				sum+= arr[i];
		}
		System.out.println("배열 arr의 총 합(음수는 절댓값):"+sum);

 

 

▶ 출력 결과

배열 arr의 총 합(음수는 절댓값):39

 

 

 

7. UP&DOWN

▶ 실습 내용

 

[JAVA] UP&DOWN 답 맞추기

문제 ▶ Random 함수를 이용한다. ▶ 정수형 변수 num에 랜덤 값을 넣는다. ▶ 숫자를 입력하여 num의 값과 같은지 비교한다. 입력한 숫자가 num의 값보다 작으면 UP, 크면 DOWN을 출력한다. ▶ 사용자가

deliciouscode.tistory.com

 

 

 

 

 


2023년 5월 25일 금요일

<10일차 수업 후기>

10일차 수업부터는 새로운 강사님께 수업을 받는다. 최근까지도 관련 업종에서 일을 하셔서 실무와 관련된 많은 도움을 받을 수 있을 것 같아서 너무 좋다!

오늘부터는 그동안 학습했던 내용 중에 어려웠거나 중요한 내용 위주로 복습하고, 해당 내용의 연습 문제를 풀어보는 방식으로 수업을 진행한다고 하셨다.

오늘 나는 Math 함수를 이용하여 최솟값과 절댓값을 구하는 방법을 배웠다. 아직 함수를 많이 외우지 못해서 자바의 함수에 대해 조금 더 많은 공부를 해야겠다.

728x90
반응형

+ Recent posts