728x90
반응형

<오늘의 학습 - 데이터베이스를 관리하는 방법>

1. 컬렉션

2. 제네릭

3. Vector

4. ArrayList

5. HashMap

 

 

3. Vector

▶ Vector <E>의 특징

  1. java.util.Vector
    • <E>에서 E 대신 요소로 사용할 특정 타입으로 구체화한다.
  2. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이다.
    • 배열의 길이 제한을 극복한다.
    • 원소의 개수가 넘치면 자동으로 길이를 조절한다.
  3. Vector에 삽입 가능한 것
    • 객체, null
    • 기본 타입은 Wrapper 객체로 만들어 저장한다.
  4. Vector의 객체 삽입
    • 벡터의 맨 뒤에 객체를 추가한다.
    • 벡터 중간에 객체를 삽입할 수 있다.
  5.  Vector의 객체 삭제
    • 임의의 위치에 있는 객체 삭제할 수 있다.
    • 객체 삭제 후 자동 자리 이동

 

 

Vector <E> 클래스의 주요 메소드

메소드 설명
boolean add(E element) 벡터의 맨 뒤에 element 추가
void add(int index, E element) 인덱스 index 위치에 element를 삽입
boolean addAll(Collection<? extends E> c) 컬렉션 c의 모든 요소를 벡터의 맨 뒤에 추가
E elementAt(int index) 인덱스 index의 요소 리턴
E get(int index) 인덱스 index의 요소 리턴
E remove(int index) 인덱스 index의 요소 삭제
boolean remove(Object obj) 객체 obj와 같은 첫 번째 요소를 벡터에서 삭제
void removeAllElements() 벡터의 모든 요소를 삭제하고 크기를 0으로 만듦
void clear() 벡터의 모든 요소 삭제
int size() 벡터가 포함하는 요소의 개수 리턴
Object[] toArray() 벡터의 모든 요소를 포함하는 배열을 리턴
int capacity() 벡터의 현재 용량 리턴
int indexOf(Object obj) obj와 같은 첫 번째 요소의 인덱스를 리턴. 없으면 -1 리턴
boolean isEmpty() 벡터가 비어 있으면 true 리턴
boolean contains(Object obj) 벡터가 지정된 객체 obj를 포함하고 있으면 true 리턴

 

 


예제 1

  • 정수를 다루는 벡터를 생성하고 활용해 보자.

 

main 코드

import java.util.Vector;

//정수만 다루는 벡터를 생성하고 활용하는 예제
public class VectorEx {
	public static void main(String[] args) {
		Vector<Integer> vector = new Vector<Integer>();

		vector.add(5); //5 삽입
		vector.add(4); //4 삽입	
		vector.add(-1); //-1 삽입

		vector.add(2,100);//벡터는 중간에 값을 삽입할 수 있다. 4와 -1 사이에 정수 100을 삽입 

		System.out.println("벡터 내의 요소 객체 수:"+vector.size());
		System.out.println("벡터의 용량:"+vector.capacity());

		
		//벡터의 모든 요소 출력
		System.out.print("벡터의 요소:");
		for(int num:vector)
			System.out.print(num+" ");
		System.out.println(); //줄바꿈

		
		//벡터의 모든 정수의 합
		int sum=0;
		for(int num : vector)
			sum+=num;
		System.out.println("벡터의 모든 정수의 합:"+sum);
	}//main_end
}//VectorEx_end

 

출력 결과

벡터 내의 요소 객체 수:4
벡터의 용량:10
벡터의 요소:5 4 100 -1 
벡터의 모든 정수의 합:108

 

 


 예제 2

  • 문자열을 관리하는 vector를 만들어라.
  • 첫 번째 공간에는 "홍길동" 입력
  • 두 번째 공간에는 "유재석" 입력
  • 세 번째 공간에는 "강호동" 입력
  • "홍길동"과 "유재석" 사이에 "박명수" 입력
  • "홍길동" 삭제
  • 최종적으로 vector에 있는 모든 문자열 출력

 

 main 코드

import java.util.Vector;

public class VectorString {
	public static void main(String[] args) {
		//문자열을 관리하는 vector 객체 생성
		Vector<String> vector = new Vector<String>();
		
		vector.add("홍길동"); //0번째 요소
		vector.add("유재석"); //1번째 요소
		vector.add("강호동"); //2번째 요소
		
		vector.add(1, "박명수"); //0번째 요소와 1번째 요소 사이에 값을 넣음. 기존 요소들은 뒤로 한 칸씩 밀림
		
		vector.remove("홍길동"); //홍길동 삭제
//		or
//		vector.remove(0); // 0번째 인덱스 요소 삭제
		
		//벡터의 모든 문자열 출력
		for(String num:vector)
			System.out.println(num);
//		or
//		for(int i=0;i<vector.size();i++)
//			System.out.println(vector.get(i));
		
	}//main_end
}//VectorString_end

 

출력 결과

박명수
유재석
강호동

 

※ 만약 반복문을 이용하여 특정 단어와 일치하는 값을 모두 지우고 싶다면 인덱스의 맨 끝부터 접근해야 한다. 인덱스의 값을 삭제하면 인덱스가 앞으로 당겨지기 때문에 맨 앞의 인덱스부터 접근한다면 일부 인덱스에 접근할 수 없기 때문이다.

		for(int i=vector.size()-1;i>=0;i--)
			if(vector.get(i).equals("강호동"))
				vector.remove(i);

 

 

 

4. ArrayList

▶ ArrayList <E>의 특징

  1. 벡터와 거의 동일하지만 메소드를 사용할 때 차이가 있다.
  2. 벡터와 달리 스레드 동기화 기능이 없다.
    • 다수 스레드가 동시에 ArrayList에 접근할 때 동기화되지 않는다.
    • 개발자가 스레드 동기화 코드를 작성한다.
  3. java.util.ArrayList, 가변 크기 배열을 구현한 클래스
    • <E>에서 E 대신 요소로 사용할 특정 타입으로 구체화
  4. ArrayList에 삽입 가능한 것
    • 객체, null
    • 기본 타입은 박싱/언박싱으로 Wrapper 객체로 만들어 저장한다.
  5. ArrayList에 객체 삽입
    • 리스트의 맨 뒤에 객체를 추가한다.
    • 리스트의 중간에 객체를 삽입할 수 있다.
  6. ArrayList의 객체 삭제 
    • 임의의 위치에 있는 객체를 삭제할 수 있다.

 

 

ArrayList <E> 클래스의 주요 메소드 (벡터와 매우 유사하다)

메소드 설명
boolean add(E element) ArrayList의 맨 뒤에 element 추가
void add(int index, E element) 인덱스 index 위치에 element를 삽입
boolean addAll(Collection<? extends E> c) 컬렉션 c의 모든 요소를 ArrayList의 맨 뒤에 추가
E elementAt(int index) 인덱스 index의 요소 리턴
E get(int index) 인덱스 index의 요소 리턴
E remove(int index) 인덱스 index의 요소 삭제
boolean remove(Object obj) 객체 obj와 같은 첫 번째 요소를 ArrayList에서 삭제
void clear() ArrayList의 모든 요소 삭제
int size() ArrayList가 포함하는 요소의 개수 리턴
Object[] toArray() ArrayList의 모든 요소를 포함하는 배열을 리턴
int indexOf(Object obj) obj와 같은 첫 번째 요소의 인덱스를 리턴. 없으면 -1 리턴
boolean isEmpty() ArrayList가 비어 있으면 true 리턴
boolean contains(Object obj) ArrayList가 지정된 객체 obj를 포함하고 있으면 true 리턴

 

 


▶ 예제 1

  • ArrayList 문자열을 관리하는 객체 생성
  • Scanner로 문자열을 5개 입력받아서 Arraylist 객체에 저장
  • ArrayList 객체에 있는 문자열 출력
  • 가장 긴 문자열을 찾아 출력

 

 main 코드

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListEx {
	public static void main(String[] args) {
		//문자열을 관리하는 ArrayList 객체 생성
		ArrayList<String> arraylist = new ArrayList<String>();
		
		Scanner scan = new Scanner(System.in);
		
		//문자열을 5개 입력받아 ArrayList 객체에 저장
		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 문자열을 입력하세요 >> ");
			arraylist.add(scan.next());
		}
		System.out.println(); //줄바꿈
		
		//출력
		for(int i=0;i<arraylist.size();i++)
			System.out.println("arraylist의 "+(i+1)+"번째 문자열:"+arraylist.get(i));
		System.out.println(); //줄바꿈
		
		//가장 긴 문자열을 찾아 출력
		int longIndex = 0;
		for(int i=1;i<arraylist.size();i++)
			if(arraylist.get(longIndex).length() < arraylist.get(i).length())
				longIndex=i;
		
		System.out.println("가장 긴 문자열:"+arraylist.get(longIndex));
		
		scan.close();
	}//main_end
}//ArrayListEx_end

 

출력 결과

1번째 문자열을 입력하세요 >> Kim
2번째 문자열을 입력하세요 >> Lee
3번째 문자열을 입력하세요 >> Park
4번째 문자열을 입력하세요 >> Jo
5번째 문자열을 입력하세요 >> Han

arraylist의 1번째 문자열:Kim
arraylist의 2번째 문자열:Lee
arraylist의 3번째 문자열:Park
arraylist의 4번째 문자열:Jo
arraylist의 5번째 문자열:Han

가장 긴 문자열:Park

 

 


▶ 예제 2

  • ArrayList Integer 관리하는 객체 생성
  • Scanner로 숫자 5개를 입력받아 저장
  • 가장 작은 숫자를 찾아서 출력
  • 중복이 있으면 중복 개수를 출력
  • ex) 3,5,3,6,9
    가장 작은 수 : 3
    중복 개수 : 2

 

 main 코드

		ArrayList<Integer> a = new ArrayList<Integer>();
		Scanner scan = new Scanner(System.in);

		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요 >> ");
			a.add(scan.nextInt());
		}

		//최솟값과 중복값 구하기
		int minIndex=0, count=1;
		for(int i=0;i<a.size();i++){
			if(i!=0 && a.get(minIndex)>a.get(i)) //Math.min(min, a.get(i));
				minIndex=i;
			for(int j=i+1;j<a.size();j++)
				if(a.get(i)==a.get(j)) //중복
					count++;
		}

		System.out.println("가장 작은 수:"+a.get(minIndex));
		System.out.println("중복 개수:"+count);

		scan.close();

 

 출력 결과

1번째 숫자를 입력하세요 >> 3
2번째 숫자를 입력하세요 >> 5
3번째 숫자를 입력하세요 >> 3
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 9
가장 작은 수:3
중복 개수:2

 

 


▶ 예제 3

  • ArrayList Integer 관리하는 객체 생성
  • Scanner로 숫자 5개를 입력받아 저장
  • 가장 작은 숫자와 가장 큰 숫자의 위치 바꾸기
  • ex) 5,3,7,6,9 → 5,9,7,6,3

 

 main 코드

		ArrayList<Integer> list = new ArrayList<Integer>();
		Scanner scan = new Scanner(System.in);

		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요 >> ");
			list.add(scan.nextInt());
		}

		//최솟값, 최댓값 찾기
		int minIndex=0, maxIndex=0;
		for(int i=1;i<list.size();i++){
			if(list.get(minIndex)>list.get(i))
				minIndex=i;
			else if(list.get(maxIndex)<list.get(i))
				maxIndex=i;
		}


		System.out.print("변경 전 ArrayList:");
		for(int num:list)
			System.out.print(num+" ");
		System.out.println(); //줄바꿈

		 //인덱스 오류를 막기 위해 낮은 배열의 인덱스를 minIndex라고 가정한다.
		if(minIndex>maxIndex){
			int temp = minIndex;
			minIndex = maxIndex;
			maxIndex = temp;
		}

		//값 변경
		//ex)5 3 7 6 9
		list.add(minIndex, list.get(maxIndex));	//5 9 3 7 6 9
		list.remove(maxIndex+1); //5 9 3 7 6
		list.add(maxIndex+1, list.get(minIndex+1)); //5 9 3 7 6 3
		list.remove(minIndex+1); // 5 9 7 6 3


		System.out.print("변경 후 ArrayList:");
		for(int num:list)
			System.out.print(num+" ");
		
		scan.close();

 

 출력 결과

1번째 숫자를 입력하세요 >> 5
2번째 숫자를 입력하세요 >> 3
3번째 숫자를 입력하세요 >> 7
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 9
변경 전 ArrayList:5 3 7 6 9 
변경 후 ArrayList:5 9 7 6 3
1번째 숫자를 입력하세요 >> 5
2번째 숫자를 입력하세요 >> 9
3번째 숫자를 입력하세요 >> 7
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 3
변경 전 ArrayList:5 9 7 6 3 
변경 후 ArrayList:5 3 7 6 9

 

 

 

5. HashMap

▶ HashMap <K, V>의 특징

  1. 키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션
    • java.util.HashMap
    • K는 키로 사용할 요소의 타입, V는 값으로 사용할 요소의 타입 지정
    • 키와 값이 한 쌍으로 삽입된다.
    • 키는 해시맵에 삽입되는 위치 결정에 사용된다.
    • 값을 검색하기 위해서는 반드시 키를 이용한다.
  2. 삽입, 삭제, 검색이 빠른 특징이 있다.
    • 요소 삽입 : put() 메소드
    • 요소 검색 : get() 메소드
  3. ex) HashMap<String, String> 생성, 요소 삽입, 요소 검색

 

 

▶ HashMap <K, V>의 주요 메소드

메소드 설명
V put(K key, V key) key와 value 쌍을 해시맵에 저장
V get(Object key) 지정된 ket의 값 리턴. 키가 없으면 null 리턴
V remove(Object key) 지정된 key를 찾아 키와 값 모두 삭제
void clear() 해시맵의 모든 요소 삭제
boolean containsKey 지정된 key를 포함하고 있으면 true 리턴
boolean containsValue(Object value) 지정된 값에 일치하는 키가 있으면 true 리턴
boolean isEmpty() 해시맵이 비어 있으면 true 리턴
Set<K> KeySet() 해시맵의 모든 키를 담은 set<K> 컬렉션 리턴
int size() HashMap에 포함된 요소의 개수 리턴

 

 


▶ 예제

  • 이름(키)이 있으면 점수를 출력
  • 없는 사람을 입력하면 그런 사람 없음 출력
  • "김성동", 97
    "황기태", 88
    "김남윤", 98
    "이재문", 70
    "한원선", 99 //점수 저장

 

▷ main 코드

import java.util.HashMap;
import java.util.Scanner;

public class HashMapEx {
	private static final Integer NULL = null;

	public static void main(String[] args) {
		HashMap<String,Integer> student = new HashMap<String,Integer>();

		// 5개의 점수 저장
		student.put("김성동", 97);
		student.put("황기태", 88);
		student.put("김남윤", 98);
		student.put("이재문", 70);
		student.put("한원선", 99);

		Scanner scan = new Scanner(System.in);

		System.out.print("점수를 받아올 이름을 입력하세요 >> ");
		String s = scan.next(); //출력할 때 이름도 나타내기 위해 변수 s 이용
		Integer key = student.get(s); //Integer는 NULL값을 받을 수 있다.
		
		if(key == NULL)
			System.out.println("그런 사람 없음");
		else
			System.out.println(s+" 학생의 점수:"+key);
		
//		or
//		if(student.containsKey(s)){
//			System.out.println(s+" 학생의 점수:"+student.get(s));
//		} else {
//			System.out.println("그런 사람 없음");
//		}
		
		scan.close();
        
	}//main_end
}//HashMapEx_end

 

 출력 결과

점수를 받아올 이름을 입력하세요 >> 김남윤
김남윤 학생의 점수:98
점수를 받아올 이름을 입력하세요 >> 홍길동
그런 사람 없음

 

 

 

 

 


2023년 6월 7일 수요일

<16일차 수업 후기>

Vector. ArrayList. HashMap 은 처음 접해보았다. 낯설어서 자신감이 떨어졌었는데 파이썬의 리스트와 비슷해서 생각보다 어렵지 않게 문제를 풀 수 있었다. 매번 파이썬을 덕을 보는 것을 보니 공부하길 잘했다는 생각이 들었다.

HashMap을 공부하면서 데이터 객체를 키값쌍의 형태로 표현하는 JSON이 생각났다. 두 개의 차이가 궁금해서 찾아봤는데 Java에서 해시맵을 JSON 객체로 변환하는 방법이 있을 정도로 유사하다는 것을 깨달았다. 정보처리기사를 공부하면서 JSON과 같은 용어들을 단순히 외우기만 했었는데, 실습을 해보니 더 이해가 잘되는 것 같다.

강사님께서는 지금까지 학습한 내용 중에 HashMap과 ArrayList가 가장 중요하다고 말씀하셨다. 가장 중요한 내용인데 많이 접해보지 못했기 때문에 강사님께서 보내주신 자료를 보며 더 많은 시간을 투자하여 공부해야겠다.

728x90
반응형
728x90
반응형

<오늘의 학습 - 데이터베이스를 관리하는 방법>

1. 컬렉션

2. 제네릭

3. Vector

4. ArrayList

5. HashMap

 

 

1. 컬렉션 (collection)

▶ 컬렉션(collection)의 개념

  • 요소(element) 객체들의 저장소
    • 객체들의 컨테이너라고도 불린다.
    • 요소의 개수에 따라 크기를 자동으로 조절한다.
    • 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
  • 고정 크기의 배열을 다루는 어려움을 해소한다.
  • 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이하다.

 

※ 주로 ArrayList를 많이 사용하며, HashMap은 다른 것과 조합하여 많이 사용된다.

 

 

▶ Collections 클래스

  • java.util 패키지에 포함된다.
  • 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 리턴한다.
  • 모든 메소드는 static 타입이기 때문에 클래스 이름으로 바로 호출할 수 있다.
  • 주요 메소드 - Collections.메소드
    1. sort() : 컬렉션에 포함된 요소들을 정렬
    2.  reverse() : 요소의 순서를 거꾸로
    3. max() : 요소들의 최댓값을 찾음
    4. min() : 요소들의 최솟값을 찾음
    5. binarySearch() : 특정 값을 검색
      • ex) Collectios.binarySearch(list명,검색할요소);

 

 

 

 

2.  제네릭 (generics)

  • 제네릭이란, 특정 타입만 다루지 않고 모든 종류의 데이터 타입을 다룰 수 있도록 일반화된 타입 매개 변수를 이용해 클래스나 메소드를 작성하는 기법이다.
  • <E>, <K>, <V> : 타입 매개 변수
    • 요소 타입을 일반화한 타입
  • 제네릭 클래스의 예시
    • 제네릭 스택 : Stack <E>
    • E에 특정 타입으로 구체화
    • 정수만 다루는 스택 : Stack<Integer>
    • 문자열만 다루는 스택 : Stack<String>

 

 

▶ 컬렉션과 제네릭

  • 컬렉션은 제네릭 기법으로 구현된다.
  • 컬렉션의 요소는 객체만 가능하다.
  • 기본적으로 int, char, double 등의 기본 타입은 사용할 수 없다.
  • JDK 1.5부터 자동 박싱/언박싱으로 기본 타입의 값을 객체로 자동 변환한다.

 


▶ 제네릭 클래스와 인터페이스

public class MyClass<T> { //제네릭 클래스 MyClass 선언. T:타입 매개 변수
	T val; //val 타입은 T
	void set(T a) {
		val = a; //T 타입의 값 a를 val에 지정
	}
	T get() {
		return val; //T 타입의 값 val 리턴
	}
}
  • 클래스나 인터페이스 선언부에 일반화된 타입 추가

 

MyClass<String> s;
List<Integer> li;
Vector<String> vs;
  • 제네릭 클래스의 레퍼런스 변수 선언

 


▶ 제네릭 객체 생성 - 구체화(specialization)

  • 제네릭 타입의 클래스에 구체적인 타입을 대입하여 객체 생성
  • 컴파일러에 의해 이루어진다.

 


타입 매개 변수

  • ‘<‘과 ‘>’사이에 하나의 대문자를 타입 매개변수로 사용
  • 많이 사용하는 타입 매개 변수 문자
    • E : Element를 의미하며 컬렉션에서 요소를 표시할 때 많이 사용한다.
    • T : Type을 의미한다.
    • V : Value를 의미한다.
    • K : Key를 의미한다. 
  • 타입 매개변수가 나타내는 타입의 객체 생성 불가능
    • ex) T a = new T(); (X)
  • 타입 매개변수는 나중에 실제 타입으로 구체화
  • 어떤 문자도 매개 변수로 사용 가능

 

 

※ 타입 매개 변수 T를 String으로 구체화

public class MyClass<String> {
	String val; //val 타입은 String
	void set(String a) {
		val = a; //String 타입의 값 a를 val에 지정
	}
	String get() {
		return val; //String 타입의 값 val 리턴
	}
}

 

 

※ 타입 매개 변수에 기본 타입은 사용할 수 없다.

Vector<int> vi = new Vector<int>(); //컵파일 오류. int는 사용 불가

Vector<Integer> vi = new Vector<Integer>(); //정상 코드
  • int 대신 Integer를 사용해야 한다.

 

 


▶ 제네릭 스택 만들기

  • Stack : Last In First Out (LIFO;후입선출)
  • Queue : First In First Out (FIFO;선입선출)

 

▷ 제네릭 클래스 코드

class GStack<T> {
	int tos; 
	Object [] stck;	//무엇이든 다 수용하기 위해 Object로 선언
	
	//생성자
	public GStack() {
		tos = 0; 
		stck = new Object [10];
	}
	
	//값 입력
	public void push(T item) {
		if(tos == 10)
			return; //stck의 크기보다 많은 값을 입력받을 수 없기 때문에 메소드 탈출
		stck[tos] = item;
		tos++;
	}
	
	//값 출력
	public T pop() {
		if(tos == 0)
			return null; //stck에 아무것도 들어있지 않다면 null 반환
		tos--; //값을 넣은 뒤에 tos++;를 했기 때문에 값을 출력하기 전에 tos--을 해주어야 한다.
		return (T)stck[tos]; //값
	}
}

 


▷ main 코드

		GStack<String> stringStack = new GStack<String>(); //T는 String 타입
		
		stringStack.push("seoul");
		stringStack.push("busan");
		stringStack.push("LA");
		
		for(int n=0; n<4; n++)
			System.out.println(stringStack.pop());
		System.out.println();//줄바꿈
		
		GStack<Integer> intStack = new GStack<Integer>(); //T는 Integer 타입
		
		intStack.push(1);
		intStack.push(3);
		intStack.push(5);
		
		for(int n=0; n<3; n++)
			System.out.println(intStack.pop());
  • T에는 String 타입, Integer 타입이 각각 들어간다.

 

▷ stringStack.push 값

tos 값 Object[] stck 값
tos=0 (GStack 생성자 결과) stck[0]="seoul"
tos=1 stck[1]="busan"
tos=2 stck[2]="LA"
tos=3 (tos++의 결과)  

 

▷ stringStack.pop 값

tos 값 Object[] stck 값
tos=2 (tos--의 결과) stck[2]="LAl"
tos=1 stck[1]="busan"
tos=0 stck[0]="seoul"
tos=0 return null

 


▷ 출력 결과

LA
busan
seoul
null

5
3
1

 

 

 

 

다음 학습

 

[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차)

1. 컬렉션 2. 제네릭 3. Vector 4. ArrayList 5. HashMap 3. Vector ▶ Vector 의 특징 java.util.Vector 에서 E 대신 요소로 사용할 특정 타입으로 구체화한다. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

보완 전 코드

 

[JAVA] 문자열을 정수로 바꾸기

문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있

deliciouscode.tistory.com

보완 전에는 문자열을 문자화시키는 메소드(charAt)만 알고 있었다.

그래서 모든 문자열을 한 글자씩 문자화 시켜서 자릿수만큼 10을 반복하여 곱한 값을 모두 더해 리턴하는 코드를 작성하였다.

하지만 HRD 수업에서 메소드를 배우면서, 이전에 작성한 코드보다 더 짧고 간결한 코드를 작성할 수 있다는 생각이 들어 새로운 코드를 작성하였다.

 

 

문제

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

▶ 제한사항

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

 

 

1. Solution 코드

class Solution {
    public int solution(String s) {
        int num=0,m=0;
        if(s.charAt(0)=='-'){
            m=1; //문자열의 맨 앞 부분이 마이너스로 시작함을 알려줌
            s=s.replace("-","");
        }
        else if(s.charAt(0)=='+')
            s=s.replace("+","");
        
        num = Integer.parseInt(s);
        
        
        if(m==1)
            return -num;
        else
            return num;
    }
}
  • 문자열의 맨 앞 부분이 "-"나 "+"로 시작될 수 있기 때문에 replace를 이용하여 숫자로만 구성된 문자열으로 만들어준다.
  • 숫자로 구성된 문자열을 정수형으로 바꾸어 반환한다.
  • 문자열의 맨 앞 부분이 "-"로 시작하면 m의 값을 1으로 바꾸어 음수임을 알 수 있다.

 

 

2. Solution 코드

class Solution {
    public int solution(String s) {
        return Integer.parseInt(s);
    }
}
  • Integer.parseIn 을 사용하면 문자열 맨 앞의 "-"가 음수 값으로 적용되는 것을 알게 되었다.
728x90
반응형

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

[JAVA] 하샤드 수  (0) 2023.05.30
[JAVA] 정수 제곱근 판별  (0) 2023.05.30
[JAVA] 문자열을 정수로 바꾸기  (2) 2023.05.29
[JAVA] 문자열 내 p와 y의 개수  (0) 2023.05.29
[JAVA] 자연수 뒤집어 배열로 만들기  (0) 2023.05.29
728x90
반응형

<오늘의 학습>

1. 추상클래스

2. 인터페이스

3. 패키지

4. Object 클래스

5. Wrapper 클래스

6. String 객체

7. Math 클래스

 

 

6.  String 객체

▶ 특징

  1. 스트링 생성 방법 - 리터럴로 생성
    • String s = "Hello";
    • JVM이 리터럴을 관리하여 응용프로그램 내에서 공유된다.
  2. String 객체로 생성 - String t = new String("Hello");
    • 힙 메모리에 String 객체 생성
  3. 스트링 객체는 수정이 불가능하다.
  4. 스트링 비교 시 반드시 equals()를 사용해야 한다.
    • equals()로 내용을 비교한다.

 

 

주요 메소드

메소드 설명
char charAt(int index) intdex 인덱스에 있는 문자 값 리턴
int codePointAt(int index) index 인덱스에 있는 유니코드 값 리턴
int length() 스트링의 길이(문자 개수) 리턴
int compareTo(String anotherString) 두 스트링을 사전 순으로 비교하여 두 스트링이 같으면 0, 현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수를 리턴
boolean contains(CharSequence s) s에 지정된 문자들을 포함하고 있으면 true 리턴
String replace(charsequence target, Charsequence replacement) target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 스트링 리턴
String[] split(String regex) 정규식 regex에 일치하는 부분을 중심으로 스트링을 분리하고, 분리된 스트링들을 배열로 저장하여 리턴
String trim() 스트링 앞뒤 공백 문자들을 제거한 스트링 리턴.(\t,\n 포함)
String subString(int beginIdex) beginIndex 인덱스부터 시작하는 서브 스트링 리턴
String toLowerCase() 소문자로 변경한 스트링 리턴
String toUpperCase() 대문자로 변경한 스트링 리턴
String concat(String str) 현재 스트링 뒤에 str 스트링을 덧붙인 새로운 스트링 리턴

 

 

 

7.  Math 클래스

▶ 산술 연산 메소드 제공 - java.lang.Math

  • 모든 메소드는 static 타입 : 클래스 이름으로 바로 호출해야 한다.

 

 

▶ 주요 메소드

메소드 설명
static double max(double a, double b) 두 수 a, b 중에서 큰 수를 리턴
static double min(double a, double b) 두 수 a, b 중에서 작은 수를 리턴
static double abs(double a) 실수 a의 절댓값 리턴
static double random() 0.0보다 크거나 같고 1.0보다 작은 임의의 실수를 리턴
static double cos(double a) 실수 a의 cosine 리턴
static double sin(double a) 실수 a의 sine 리턴
static double tan(double a) 실수 a의 tangent 리턴
static double sqrt(double a)
실수 a의 제곱근 리턴
static double exp(double a) e^a 값 리턴
static double ceil(double a) 자릿수 올림. 실수 a보다 크거나 같은 수 중에서 가장 작은 정수를 실수 타입으로 리턴
static double floor(double a) 자릿수 내림. 실수 a보다 작거나 같은 수 중에서 가장 큰 정수를 실수 타입으로 리턴
static long round(double a) 반올림. 실수 a를 소수 첫째 자리에서 반올림한 정수를 long타입으로 반환

 

 

▶ Math 클래스를 활용한 난수 발생

  • java.util.Random 클래스 사용 
  • Random 구구단 실습 예제
 

[JAVA] 배열과 Random (5일차)

1. 배열 2. 이차원 배열 3. 삼차원 배열 4. Random 1. 배열 ▶ 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있으며, 자료가 연속으로 나열된 자료 구조이다. 즉, 동일 자료형의 기억장소 집합체를

deliciouscode.tistory.com

 

  • LOTTO 실습 예제
 

[JAVA] Math.random()을 이용한 LOTTO

문제 로또 번호를 입력 받아 로또 당첨 여부를 확인하시오. 6개를 다 맞추면 1등, 5개를 맞추고 보너스 번호까지 맞추면 2등, 5개만 맞추면 3등, 4개를 맞추면 4등, 3개를 맞추면 5등이다. ▶ 제한사

deliciouscode.tistory.com

 

 

 

단축키

alt+shift+a : 수정 모드로 전환. 여러 줄을 한 번에 수정할 수 있다.

alt+shift+r : 같은 단어를 한 번에 수정할 수 있다.

 

 

 

 


2023년 6월 5일 월요일

<15일차 수업 후기>

드디어 너무나도 배우고 싶었던 자바의 메소드를 학습했다. 당연히 전부 외우면 좋겠지만 다 외우기 어려울 수 있다고 중요한 개념을 몇 개 말씀해주셨다.

그동안 메소드를 많이 알지 못해서 속상하다고 후기에 많이 썼는데 여러 실습들과 오늘의 수업으로 조금은 익숙해진 것 같다. 메소드를 자연스럽게 사용하기 위해서 오늘 배운 내용을 열심히 복습하자.

728x90
반응형
728x90
반응형

문제

public interface ArrayInterface {
	//int array[]={3,5,2,4,1};
	
	//배열의 가장 큰 값과 작은 값의 차이
	int MaxSubMin(int[] a);
	
	//배열의 가장 큰 값을 구해 맨 마지막 값과 위치 바꾸기
	void MaxChange(int[] a);
	
}
  • 인터페이스 ArrayInterface의 추상 메소드를 모두 구현한 클래스 ArrayClass를 작성하시오.
  • 배열의 가장 큰 값과 작은 값의 차이를 반환하는 MaxSubMin 메소드와 배열의 가장 큰 값을 맨 마지막 값의 위치와 변경하는 MaxChange 메소드를 오버라이딩하여 작성하시오.

 

 

▶ ArrayClass코드

public class ArrayClass implements ArrayInterface{
	//배열의 가장 큰 값과 작은 값의 차이 구하기
	@Override
	public int MaxSubMin(int[] a) {
		int MaxIndex=0, MinIndex=0;
		for(int i=1;i<a.length;i++){
			if(a[MaxIndex]<a[i])
				MaxIndex=i;
			if(a[MinIndex]>a[i])
				MinIndex=i;
		}
		return (a[MaxIndex]-a[MinIndex]);
	}//MaxSubMin_end

	//배열의 가장 큰 값을 맨 마지막 값과 위치 바꾸기
	@Override
	public void MaxChange(int[] a) {
		int MaxIndex=0, temp;
		for(int i=1;i<a.length;i++)
			if(a[MaxIndex]<a[i])
				MaxIndex=i;
		
		temp=a[MaxIndex];
		a[MaxIndex]=a[a.length-1];
		a[a.length-1]=temp;
	}//MaxChange_end
}

 

 

▶ main 코드

		ArrayClass a = new ArrayClass();
		int array[]={3,5,2,4,1};
		System.out.println("배열:"+Arrays.toString(array));
		
		//배열의 가장 큰 값과 작은 값의 차이
		System.out.println("배열의 가장 큰 값과 작은 값의 차이:"+a.MaxSubMin(array));
		
		//배열의 가장 큰 값을 맨 마지막 값과 위치 바꾸기
		a.MaxChange(array);
		System.out.println("배열의 가장 큰 값과 마지막 배열 값의 위치 변경:"+Arrays.toString(array));

 

 

▶ 출력 결과

배열:[3, 5, 2, 4, 1]
배열의 가장 큰 값과 작은 값의 차이:4
배열의 가장 큰 값과 마지막 배열 값의 위치 변경:[3, 1, 2, 4, 5]

 

 

 

 

 

 

[JAVA] 추상 클래스와 인터페이스 실습 (15일차)

1. 추상 클래스 2. 인터페이스 3. 패키지 4. Object 클래스 5. Wrapper 클래스 6. String 객체 7. Math 클래스 1. 추상클래스 ▶ Calculator 코드 public abstract class Calculator { public abstract int add(int a, int b); public abstra

deliciouscode.tistory.com

 

728x90
반응형

+ Recent posts