국비수업/CODE

code 실습 / 9️⃣

밀김 2023. 2. 27. 11:01
728x90

 

 

 

 

 

 

		{
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			//위 배열을 모두 출력하는 코드를 작성
			for(int i=0; i<nums.length; i++) {
				System.out.println(nums[i]);
		}		
		{
			//위 배열을 뒤의 숫자부터 모두 출력하시오
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			for(int i=0; i<nums.length; i++) {
				System.out.println(nums[nums.length-1-i]);
			}
		}
        
 ---------------------------------------------------------------------------------       
        
        
		//2의 배수 위치의 숫자만 출력(0제외)
		//등차수열 기본식: an=a1+(n-1)*d -> {2,4,6,8,10,...}요런값이 나옴
		//a1=초항(2,4,6,8중에서 첫번째값) / n:~번째 / d=공차(증가하거나 감소하거나)
		{
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			for(int i=0, n=1; i<nums.length; i++) { 
            //n은 ~번째인데 1부터 시작하는 이유는 (n-1)즉,1-1을 해야 0부터 시작하기 때문에
				if(i==2+(n-1)*2) {
               //an=a1+(n-1)*d 
					System.out.println(nums[i]);
					n++;
               //n이 ~번째라서 계속 다음 순서로 가야하니까 n++    
				}
			}
		}
        
        
        
        
        

		{
        //위 배열에서 인덱스 2,4,8 의 배열값 출력
		//등비수열 기본식을 자바식으로 바꾸면, an=d*Math.pow(a1, m-1)
		//a1*r^(n-1) / a=2
        //r=값이 몇배씩 커지는지(2배니까 r=2) / n-1 = ~번째 
			
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			for(int i=0, n=1; i<nums.length; i++) { //n은 ~번째
				if(i==2*Math.pow(2, n-1)) {
			       //a1*r^(n-1) ^은, n승이라는 기호. 자바는 이런 기호가 없어서 math.pow를 쓴다
					System.out.println(nums[i]);
					n++;
				}
			}
		
		}

 

		int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
		int sum=0;
		
		{
			for(int i=0; i<nums.length; i++) {
				if(nums[i] != 5) {//5가 아니면(=5를 만날때까지)
					sum += nums[i];//값을 더해서 sum에 누적하고
				}else {//5가 아닌게 아니면(=5를 만나면)
					break;//구문을 멈춰라
				}
			}
			System.out.println(sum);
		}	
		}
        
        
        
        
        
        
		//첫번째 5를만나면서부터 끝까지의 숫자를 더해서 결과 출력
		{
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			int sum=0;
			for(int i=0; i<nums.length; i++) {
				if(nums[i]==5) {//i가 첫번째 5를 만났을때
					for(int j=0; j<nums.length-i; j++) {//5만나고 뒤에서부터 끝까지 숫자를 더하기 위한 for문
						//-i를 하는 이유는 i전에 있는 숫자들이(i==5) 같이 더해지면 안되니까 전체 nums길이중에서 i의 길이만큼 빼준다
						sum += nums[j+i];//j+i를 하는 이유는 첫번째 5(i==5)를 더하기에 포함해야 하니까 첫번째5부터 그 뒤에 숫자까지(j) 더해줌
					}break;//5를 한번 만나고 끝내야하니까 break를 써준다. break를 생략하면 두번째 5를 또 만나게 되니까 맨첫번째 for문이 한번 더 돈다.
				}
				}//i와 j는 같은 index이다..for문 괄호 안에 있으니까..
			System.out.println(sum);
		}
        
        
        
        
        
        
       //첫번째 5를만나면서부터 끝까지의 숫자를 더해서 결과 출력, 다른 조 코드 (좋은 코드)
		{
			int[] nums = {2,3,42,4,5,56,5,32,5,3,2,1};
			
			int idx5 = -1; //index 순서와 겹치지 않게 초기화를 -1로 해줌
			int sum = 0; //누적값을 저장하기 위한 변수

			for(int i=0; i<nums.length; i++)
				if(nums[i] == 5) { //값5를 만나면
					idx5 = i; //값5의 인덱스를 idx5에 저장 하고
					break; //구문 중지
				}
				
			int size = nums.length-idx5;
            //배열 nums의 길이 - 값5의 인덱스 를 size변수에 저장

			for(int i=0; i<size; i++) 
            //5뒤에 숫자들을 더하기 위한 반복문
				sum += nums[i+idx5]; 
                //sum = sum+nums[i+idx5]; 
                //누적값을 저장하기 위한 변수 sum에 첫번째5와 그 뒷값들을 저장해준다(i+idx5)
				System.out.println(sum);
                //누적값 출력

		}

 

 

 

 

★ 불필요한 흐름이 적고, 중첩이 없는 코드가 좋은 코드이다 ★

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90