본문 바로가기

programming/Gukbi

국비 교육 9일차 - 배열 활용

728x90
반응형

힘들...

 

8시간 동안 컴퓨터 화면 쳐다보는게 쉬운게 아니구나

 

오늘은 새로운 개념을 배웠다기 보단 배열+제어문을 활용해서 이런저런 로직을 짜는 것들을 연습해봤다.

그리고 어려웠당 ^___^

 

 

어제 잠깐 배웠던 정렬 로직을 먼저 공부하고 그 다음에 다른 활용들 + String 문자열을 배웠음

 

// 정수 1개를 입력받아서 2진법으로 만드는 프로그램 => 16bit (0,1=>16개)
//32767 (양수만 처리)
/*
 * 	1. 정렬
 * 		= 선택정렬
 * 		= 버블정렬
 * 		1-1 빈도수 확인
 * 			1231112222 => 문자열
 * 	2. 윤년 => 달력
 * 	3. 숫자 야구 게임 (중복이 없는 난수 발생)
 * 				   ===============
 * 				   로또 => 6개
 * 
 * 	4. 문자열배열
 *  
 *  
 * 	
 */
/*
 * 	 1. 변수(저장공간)
 * 		= 0,1을 16개 저장할 수 있는 공간 => 배열 
 * 		= 사용자 입력값 저장
 * 		= 배열 => 16 => index번호를 제어할 변수
 */
import java.util.Scanner;

public class 배열활용_2 {

	public static void main(String[] args) {
		
		int[] binary=new int[16]; //0,1
		int input; // 사용자가 입력한 정수 저장
		int index=15; // 배열에 값 채울 경우 (뒤(length-1) or 앞(0))
		
		Scanner scan = new Scanner(System.in);
		System.out.print("0~32767사이의 정수를 입력하시오:");
		input=scan.nextInt(); 
		
		// 입력된 정수에 따라 반복수행이 다름 => while 사용
		/*
		 * 	1. 정수를 나누고 나머지 저장
		 * 	2. 정수를 2로 나눈다
		 */
		System.out.println("=====라이브러리=====");
		System.out.println(Integer.toBinaryString(input));
		while(true)
		{
			binary[index]=input%2; // 0,1 저장
			input=input/2;
			if(input==0)
				break;
			index--;
		}
		
		//출력
		
		for(int i=0; i<binary.length; i++)
		{
			if(i%4==0 && i!=0)
				System.out.print(" ");
				System.out.print(binary[i]);
		}
	}

}

이거는 정수를 2진법으로 바꾸는 로직이었다. 

오케 확인 완료

 

선택정렬&버블정렬 둘 다 배웠는데 선택정렬은 이미 어제 포스팅에 했으니

버블정렬만 쓰도록 하겠다. 

 

버블 정렬은 옆에 있는 수끼리 비교해서 뒤에부터 고정을 해 나가서 정렬을 해 나가는 방식이다. 

조금 더 어렵다

 

/*
 * 	버블정렬 : 인접한 수끼리 비교해서 변경
 * 	i=0 j=0 j=4
 * 	i=1 j=0 j=3
 * 	i=2	j=0 j=2
 * 	i=3 j=0 j=1
 * 		
 * 		j=4-i
 * 	
 * 	
 * 
 * 	30 20 50 10 40
 * 	== ==
 * 	20 30
 * 	   == ==
 * 	   30 50		
 * 		  == ==
 * 		  10 50	
 * 			 == ==
 * 			 40 50(고정)
 * 	============================== 
 * 	20 30 10 40 50
 * 	== ==	
 * 	20 30
 * 	   == ==	
 * 	   10 30
 * 		  == ==		
 * 		  30 40 50 
 * 	================================
 * 	
 *   20 10 30 40 50
 *   == ==
 *   10 20
 *   	== ==
 *   	20 30 40 50
 *   =================================
 *   10 20 30 40 50
 *   == ==
 *   10 20 30 40 50 
 *   ================================= 
 * 
 */
public class 배열활용_4 {

	public static void main(String[] args) {
		
		int[] arr= {30, 20, 50, 10, 40};
		System.out.println("====정렬 전====");
		for(int i:arr)
		{
			System.out.print(i+" ");
		}
		
		System.out.println("\n====정렬 후====");
		for(int i=0; i<arr.length-1; i++)
		{
			for(int j=0; j<arr.length-1-i; j++)
			{
				if(arr[j]>arr[j+1])
				{
					int temp =arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
				for(int k:arr)
				{
					System.out.print(k+" ");
				}
				System.out.println();
			}
			System.out.println("==="+(i+1)+"Round ====");
		}
		System.out.println("===최종결과===");
		for(int k:arr)
		{
			System.out.print(k+" ");
		}

	}

}

핵심은 아래로 몇줄 옆으로 몇줄 확인해야 하느냐가 관건이다

아래로 i줄 내려 가야하니까 얼마 이동해야할지 생각을 하고, 

옆으로 j번 돌리니까 arr.length-1-i 만큼 돌려주고

 

temp 써서 값 바꿔주는것 까지 까먹으면 안된다. 

 

버블정렬은 바로 옆에 인접한 수 (뒤에 있는 수)와 크기 비교를 해주는거기 때문에

if문 안의 조건이 arr[j] > arr[j+1] 이렇게 들어가는것도 잊으면 안되고

 

 

 

그 다음은 또 머리속이 ???로 가득찼던 빈도수 계산 문제

이걸 하는 이유가 빈도수를 계산 할 수 있으면 가장 많이 쌓인 어떤 데이터를 가져와서 뽑아 낼 수 있기 때문이다. 

 

수업이 끝나고도 계속 이짓중이라 지침

하지만 나중에 자산이 되겠지

(안되기만 해봐라 개갓은)

 

/*
 * 	0~9까지 사이의 난수 100개 가져오기
 * 	각각 몇개 인지 확인하고 저장해주는 count 배열 만들기
 */
public class 빈도수확인연습 {

	public static void main(String[] args) {
		
		int [] arr = new int [100];
		int [] count = new int [10];
		
		for(int i = 0; i<arr.length; i++) {
			arr[i]=(int)(Math.random()*10);
		}
		for(int i : arr)
		{
			count[i]++;
		}
		
		System.out.print("만들어진 배열: ");
		for(int i : arr)
		{
			System.out.print(i);
		}
		System.out.println();
		
		for(int i =0; i<count.length; i++)
		{
			System.out.println(i+":"+count[i]);
		}
		System.out.println("===최종 결과값===");
		int max=0;
		for(int i =0; i<count.length; i++)
		{
			if(max<count[i])
			{
				max=count[i];
			}
			
			
		}
		for(int i=0; i<count.length; i++) {
			if(max==count[i])
			{
				System.out.println(i+":"+count[i]);
			}
		}
		
		
	}

}

내손내만 코드 ^^

손으로 만들었다고 했지 내 머리로 만들었다고는 안했습니다? 

 

ㅋㅋ

장난이구여.. 수업에서 배운 코드 열심히 복습해본 다음에 이해했는지 확인차 혼자 다시 짜봄

막혔을때 중간에 한두번 보긴했지만..

이정도면 내가 짠거라 해보자...

우기면 다 돼 

안되는건 없어 

 

깜찍한 결과 값과 함께 찰칵-

아 이제 진짜 힘든데...

어.. 진짜...

 

 

아 이 다음 내용은 문자열 메소드 였으니까 이제 진짜 그만할래..

문자열은 뒤에가서도 배우니까.....

 

근데 또 안하기엔 찝찝해서 걍 한다 

의지의 한국인... 한국인... 난 한국 싫은데...

 

 

// equals : 문자열 비교 (일반 데이터 ==)
import java.util.Scanner;
public class 배열활용_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        final String ID="Admin"; // char[] id={'A','d','m','i','n'}
        final String PWD="1234"; // 상수 
        
        Scanner scan=new Scanner(System.in);
        String myid="";
        String mypwd="";
        
        System.out.print("ID를 입력하세요?");
        myid=scan.next();
        
        System.out.print("비밀번호를 입력하세요?");
        mypwd=scan.next();
        /*
         *    equalsIgnoreCase = 대소문자 구분 없이 
         *    equals = 대소문자 구분 
         *    Java JAVA JaVa 
         */
        if(myid.equalsIgnoreCase(ID) && mypwd.equals(PWD))
        {
        	System.out.println(myid+"님 로그인되었습니다");
        }
        else
        {
        	System.out.println("ID나 비밀번호가 틀립니다");
        }
        
	}

}

 

여기부터는 문자열인데 진짜 어려운건 아니여서 그냥 눈으로 보고 이해했으면 쓰고만 넘어가겠다. 

.equals를 사용해서 문자열이 일치 하는지 확인해주는 메소드

로그인 기능에 유용하게 쓰일 것

 

public class 배열활용_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        /*String data="Hello Java!!";
        char[] cdata=data.toCharArray(); // {'H','e','l'~~}
        for(char c:cdata)
        {
        	System.out.println(c);
        }*/
		/*char[] cdata={'A','B','C','D','E'};
		String data=String.valueOf(cdata);// 문자배열 => 스트링 
		System.out.println(data);*/
		// substring()
		/*
		 *   substring(int start)
		 *   substring(int start , int end)
		 *                         ======== 제외  6,10-1
		 *                         MainClass.java  => indexOf(".")
		 *                         A.java
		 *   
		 *   String data="Hello Java!!";
		 *                01234567891011
		 */
		String data="0123456789";
		System.out.println(data.substring(3));
		/*
		 *    "unhappy".substring(2) returns "happy"
		 *     0123445
              "Harbison".substring(3) returns "bison"
               01234567
               
               
                "hamburger".substring(4, 8) returns "urge" 4~7
                 012345678
                "smiles".substring(1, 5) returns "mile"  1~4
                 012345
                 
                 c>=4 && c<=8
		 */
		System.out.println(data.substring(3,6));// endIndex - 1
	}

}

start와 end를 잘라주는 기능... 그냥 메소드 쓰기만 하면 되는거라 어려운게 없다.

필기를 왜 날려먹었지? 라고 생각했는데 그냥 안한거였다

ㅋㅋ

 

 

아 이제 진짜 끗끗끝긋

 

내일 중복없이 번호를 만드는 로직을 배울거라는데

아니 사실 오늘 끝에 했는데

이미 그쯤엔 정신이 반쯤 나가 있었어서 뇌에 남아있는게 없다

 

어차피 낼 오전에 다시 해준다고 하셨으니....

 

진짜 내일 포스팅에 해야지

 

 

 

 

728x90
반응형