StudyServer
web, server, java, spring 등.. 공부한 것을 기록하는 장소 입니다. 공부하면서 정리하였기 때문에 틀린 내용이 있을 수 있습니다. 이야기 해주시면 수정하겠습니다.

Array

2018-11-02 00:00:00 +0000

2차원 배열

  • 2개의 int값을 가지는 배열을 3개 생성한다
int arr2[][] = new int[3][2];
  • 각 배열의 크기를 다르게 지정해줄 수 있다
  • 처음에는 1차원 배열 크기만 정해주고 그 후에 2차원 배열의 크기를 정한다
int arr2[][] = new int[3][];     // 1차원 배열의 크기를  설정
arr[0] = new int[2];             // 각 배열 크기를  다르게 할 수도 있다          
arr[1] = new int[4];
arr[2] = new int[8];
  • 선언, 생성, 초기화를 동시에 함
    #int arr3[][] = {0번배열, 1번배열 3번배열} ;
    

2차원 배열 순회

int arr3[][] = {array, array, array};
for(int i = 0; i < arr3.length; ++i)
{
    for(int j = 0; j < arr3[i].length; ++j)
     {
     System.out.println("arr3["+i+"]["+j+"]="+arr3[i][j]);
     }
}

배열 복사

System.arraycopy(src, srcPos, dest, destPos, length);
  • src : 복사원본
  • srcPos : 복사원본의 복사 시작 위치
  • dest : 복사할 대상
  • destPos : 복사할 대상의 복사 시작 위치
  • length : 복사할 길이

stack

2018-11-02 00:00:00 +0000

문제, 결과

stack 구현 beakjoon 10828

#source

import java.awt.List;
import java.util.ArrayList;
import java.util.Scanner;


public class Main {	
	
	public static class Stack
	{
		private int[] mStack;
		final int mMaxCount;
		int mPos;				// 위치이자 개수
		
		public Stack(int size)
		{
			mMaxCount = size;
			mStack = new int[mMaxCount];
			mPos = 0;
		}

		public void push(int value)
		{
			if(mPos >= mMaxCount)
				return;
			
			mStack[mPos] = value;
			++mPos;
		}
		
		public int pop()
		{
			if(0 >= mPos)
			{
				System.out.println("-1");
				return -1;
			}
			
			--mPos;
			int value = mStack[mPos];
			mStack[mPos] = value;
			
			System.out.println(value);
			return value;
		}
		
		public int size()
		{
			System.out.println(mPos);
			return mPos;
		}
		
		public int empty()
		{
			if(0 == mPos)
			{
				System.out.println(1);
				return 1;
			}

			System.out.println(0);
			return 0;
		}
		
		public int top()
		{
			if(0 >= mPos)
			{
				System.out.println(-1);
				return -1;
			}

			System.out.println(mStack[mPos-1]);
			return mStack[mPos-1];
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		int count = Integer.parseInt(sc.nextLine());
		Stack stack = new Stack(10000);

		String[] str = new String[count];
		for(int i = 0; i < count; ++i)
		{
			str[i] = sc.nextLine();
		}
		
		for(int i = 0; i < count; ++i)
		{
			Parser(stack, str[i]);
		}

	}
	
	static void Parser(Stack stack, String str)
	{
		String command = str;
		int spaceIndex = str.lastIndexOf(" ");
		if(-1 != spaceIndex)
		{
			command = str.substring(0, spaceIndex);		
		}
		
		// 비어있는문자가 없다면 하나의 문자로 이루어진 것
		if(command.equals(""))
		{
			System.out.println("equals");
			command = str;
		}
		
		if(command.equals("push"))
		{
			int tempSpaceIndex = str.lastIndexOf(" ");
			if(-1 == tempSpaceIndex)
			{
				System.out.println("value를 입력하세요");
				return;
			}
			
			String temp = str.substring(tempSpaceIndex+1, str.length());			
			int value = Integer.parseInt(temp);
			stack.push(value);
		}
		else if(command.equals("pop"))
		{
			stack.pop();
		}
		else if(command.equals("size"))
		{
			stack.size();			
		}
		else if(command.equals("empty"))
		{
			stack.empty();
		}
		else if(command.equals("top"))
		{
			stack.top();
		}
	}
}

pyramid draw

2018-11-01 00:00:00 +0000

문제

피라미드 그리기

result

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

문제풀이

공백은 한칸씩 늘어난다. 그래서1열에 길이가 1씩 증가.

그리는 위치는 한칸씩 앞으로 간다.

row value와 공백은 비례한다

row value와 *위치는 반비례한다

if(col >= count - row) * 위치를 이렇게 체크할 수 있다

source

package kosta.basic;
package pack.com;
import java.util.Scanner;
import MyExample.src.pack.com;
public class Main {
     public static void main(String[] args) {
           // TODO Auto-generated method stub
           Scanner sc = new Scanner(System.in);
           int count = sc.nextInt();
           int starCount = 1;
           int colCount = count;
           for(int row = 0; row < count; ++row )
           {
                for(int col = 1; col <= colCount; ++col)
                {
                      if(col >= count - row)
                           System.out.print("*");
                      else
                           System.out.print(" ");                           
                }
                ++colCount;
                System.out.print("\n");
           }
     }
}

Star Draw(별 그리기4)

2018-10-31 00:00:00 +0000

문제

https://www.acmicpc.net/problem/2411

결과

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

문제풀이

row는 몇번째 행인지 나타내면서 열에서 *을 그릴 index가 되기도 한다.

j >= pos 열을 그릴 때 row index(i) 보다 현재 열 인덱스(j) 가 같거나 크면 *을 그린다

소스

import java.util.Scanner;
public class Main {
     public static void main(String[] args) {         
     
//         *****
//          ****
//           ***
//            **
//             *
           // 오른쪽역방향  
           
     Scanner sc = new Scanner(System.in);
     int count = sc.nextInt();
     for(int i = 0; i < count; ++i)
     {
           for(int j = 0; j <count; ++j)
           {
                if(j >= i)
                {
                      System.out.print("*");
                }
                else
                {
                      System.out.print(" ");
                }
           }
           System.out.print("\n");
     }
     }
}

Star Draw(별 그리기3)

2018-10-31 00:00:00 +0000

문제

https://www.acmicpc.net/problem/2440

문제풀이

다음 row로 갈수록 *이 줄어든다. 그러므로 row = 5 일 때 row를 *의 개수로 쓸 수 있다.

###소스

package algo;
import java.util.Scanner;
public class Main {
     public static void main(String[] args) {         
    //      *****
    //      ****
    //      ***
    //      **
    //      *
     Scanner sc = new Scanner(System.in);
     int count = sc.nextInt();
     
     for(int i = count; i > 0; --i)
           {
                for(int col = 0; col < i; ++col)
                {
                      System.out.print("*");
                }
                System.out.print("\n");
           }
    }
}

Posts

subscribe via RSS