728x90
반응형
02-1 배열
- 자료구조
- 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계를 말한다.
- 쉽게 말해 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법.
- 배열
- int[] a; //배열의 선언
- a= new int[5] //배열의 초기화. a는 길이가 5인 배열을 참조합니다.
- int[] a = n ew int[] {1,2,3,4,5}; // 선언과 초기화를 동시에.
- 배열은 같은 형의 구성 요소가 직선모양으로 연속하여 줄지어 있는 단순한 자료구조다.
- 배열이름[인덱스]
- 배열이름.clone() //배열의 복사
- 구성요소가 n개인 배열의 구성요소는 a[0], a[1], a[2].....a[n-1]이다.
- 배열의 길이
배열이름.length - 초기값은 0이며, boolean은 false다.
- 배열 요소의 최댓값구하기
int max = a[0]; for (int i=0; i<a.length; i++) { if (a[i] >max) { max = a[i]; } return max; }
- 배열 요소를 역순으로 정렬하기
- 교환 횟수는 요소갯수/2다. 나머지는 버린다. 홀수인 가운데는 바꿀필요가 없으니까.
-
for(i=0; i<n/2; i++) { int t= a[i]; a[i] = a[n-i-1]; a[n-i-1] = t; }
- 두값의 교환
static void swap(int[]a, int index1, int index2) { int t = a[index1]; a[index1] = a[index2]; a[index2] = t; } static void reverse(int[] a) { for(int i=0; i<a.length/2; i++) { swap(a,i,a.length-i-1); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] x = new int[num]; //길이가 num인 배열생성 for (int i=0; i<num; i++) { x[i] =sc.nextInt(); } reverse(x); //함수호출 System.out.println("역순정렬"); for (int i=0; i<num; i++){ System.out.println("x[" + i + "]=" + x[i]); } }//main
- 두 배열의 비교
- 두 배열의 모든 요소 값이 같은가를 판단하는 메서드 구현하기
import java.util.*; public class do_02_05 { //배열을 비교하는 메서드 static boolean equals(int[]a, int[] b) { if(a.length != b.length) { return false; } for (int i=0; i<a.length; i++) { if(a[i]!=b[i]) { return false; } } return true; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("배열a의 길이를 입력하세요"); int numA = sc.nextInt(); int[] a = new int[numA]; for(int i=0; i<numA; i++) { System.out.println("a["+i+"]:"); a[i] = sc.nextInt(); } //배열 b System.out.println("배열b의 길이를 입력하세요"); int numB = sc.nextInt(); int[] b = new int[numB]; for(int i=0; i<numB; i++) { System.out.println("b["+i+"]:"); b[i] = sc.nextInt(); } //함수호출 System.out.println("배열a와 b는" + (equals(a,b)?"같습니다":"다릅니다")); } }
- 두 배열의 모든 요소 값이 같은가를 판단하는 메서드 구현하기
- 기수 변환
- 16진수는 아래 16개의 문자로 표현되는 수다.
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F - 8진수는 아래 8개의 숫자를 사용하여 수를 나타낸다.
0,1,2,3,4,5,6,7 -
import java.util.*; //기수 변환 public class do_02_06 { //정수값x를 r진수로 변환하여 배열d에 아랫자리부터 넣어놓고 반환을 시작한다. static int cardConvR(int x, int r, char[] d) { int digits =0; String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; do { d[digits++]= dchar.charAt(x%r); //r로 나눈 나머지 x /= r; }while (x!=0); return digits; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int no; //변환할 정수 int cd; //기수 int dno; //변환후 자릿수 char[] cno = new char[32]; //변환후 각 자리를 담을배열 System.out.println("10진수를 기수로 변환해볼까요"); do { System.out.println("변환할 음이 아닌 정수"); no = sc.nextInt(); }while (no <0); do { System.out.println("어떤 진수로 변환할까요 (2~36)"); cd = sc.nextInt(); }while(cd<2 || cd>36); dno = cardConvR(no, cd,cno); //자릿수가 담긴다. System.out.print(cd + "진수는 "); for (int i=dno-1; i>=0; i--) { System.out.print(cno[i]); } System.out.println("입니다"); } }
- 16진수는 아래 16개의 문자로 표현되는 수다.
- 소수의 나열
- 소수는 자신과 1이외의 정수로 나누어떨어지지 않는 정수.
- 다차원 배열
- int[][] x = new int[2][4];
- 행과 열이 존재한다.
- 한해의 경과 일 수를 계산하는 프로그램
- 2차원 배열을 활용한 그 해의 경과 일수 구하기.
import java.util.*; public class DayOfYear { static int[][] mdays = { {31,28,31,30,31,30,31,31,03,31,30,31}, {31,29,31,30,31,30,31,31,03,31,30,31} //윤년 }; static int isLeap(int year) { return (year %4 ==0 && year%100 !=0 || year %400 ==0) ? 1:0; } static int dayOfYear(int y, int m, int d) { int days =d; for(int i=1; i<m; i++) { days += mdays[isLeap(y)][i-1]; } return days; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("올해로 몇일이 지났을까요"); System.out.println("년: " ); int year = sc.nextInt(); System.out.println("월: " ); int month = sc.nextInt(); System.out.println("일: " ); int day = sc.nextInt(); System.out.printf("올해로 %d일째 입니다. \n",dayOfYear(year, month, day)); } }
- 2차원 배열을 활용한 그 해의 경과 일수 구하기.
- 다차원 배열의 내부
- 2행 4열의 배열의 선언은 다음과 같다.
int[][] x = new int[2][4]; - 다음과 같이 개별적으로도 수행할수 있다.
int[][] x; x = new int[2][]; x[0] = new int[4]; x[1] = new int[4];
- 다차원 배열의 복제
int[][] a = {{1,2,3,4},{5,6,7}};
int[][] b = a.clone(); - 위에서, 복제될때 a[0],a[1]은 복제되지만 하위배열들은 복제되지않고 공유됩니다. 즉, 양쪽에서 참조된다는 뜻입니다.
- 확장된 for문
int[] a = {1,2,3,4}; int sum =0; //일반 for문 for(int i=0; i<a.length; i++) { sum += a[i]; }; //확장 for문 for (int i :a) { sum +=i; } //두개는 같은 역할을 합니다!
- 2행 4열의 배열의 선언은 다음과 같다.
02-2 클래스
- 클래스란?
- 임의의 데이터형을 자유롭게 조합하여 만들수 있는 자료구조.
- 클래스의 선언
class XYZ { int x; //x는 int형 필드다. long y; //y는 long형 필드다. double z; //z는 double형 필드다. }
- 클래스형 변수를 상요할때는 먼저 클래스형 변수(실체를 참조하는 변수)를 선언하고 실체인 클래스 인스턴스를 생성해야한다.
XYZ a; // XYZ형의 클래스형 변수 a선언 a = new XYZ; // XYZ형의 클래스 인스턴스 생성 //생성과 선언 동시에 하기 XYZ a = new XYZ;
- 클래스형 변수a는 실체인 인스턴스를 참조하게된다.
- 클래스의 배열
- 클래스형 변수a는 실체인 인스턴스를 참조하게된다.
교재 | 두잇 자료구조와 함께 배우는 알고리즘 입문(자바편) | 스터디 기간 | 21.11.22~11.28 |
728x90
반응형
'알고리즘 > 개념' 카테고리의 다른 글
[Queue] 큐 와 덱 사용법과 예제를 알아보자. (0) | 2022.01.15 |
---|---|
[stack] 스택의 기본 개념과 사용법을 알아보자. (0) | 2022.01.12 |
[알고리즘] 01 기본알고리즘 (0) | 2021.11.26 |
댓글