Do it! 알고리즘 입문: 자바 편 (17)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

Do it! 알고리즘 입문: 자바 편 (17)[책리뷰 & Book review]

by Life & study 2024. 2. 2.
반응형

 

 

 

 Do it! 알고리즘 입문: 자바 편 (17)[책리뷰 & Book review]

Java의 컬렉션 프레임워크는 다양한 데이터 구조를 제공하며, 이들은 모두 향상된 for문과 함께 사용될 수 있습니다. 다음은 몇 가지 예시입니다:

List: 순서가 있는 데이터를 저장하며, 중복된 요소를 허용합니다.
java

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

for (String fruit : list) {
    System.out.println(fruit);
}



Set: 중복된 요소를 허용하지 않으며, 일반적으로 순서를 유지하지 않습니다.
java

Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");

for (String fruit : set) {
    System.out.println(fruit);
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

Map: 키-값 쌍을 저장합니다. 키는 중복을 허용하지 않으며, 값은 중복을 허용합니다.
java

Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}




Queue: 일반적으로 FIFO(First In First Out) 방식을 따르는 데이터 구조입니다.
java

Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");

for (String fruit : queue) {
    System.out.println(fruit);
}



이렇게 향상된 for문은 컬렉션 프레임워크의 모든 부분과 함께 사용되어 각 요소를 효율적으로 순회하고 처리하는 데 도움을 줍니다. 이해가 안 되는 부분이 있거나 추가적인 정보가 필요하시면 알려주세요!




 

코드 이해하기 

N에 3을 입력받는 부분은 다음과 같습니다:

java

int N = sc.nextInt();  // 사용자로부터 N을 입력받습니다.


이 부분에서 nextInt() 메서드를 호출하여 사용자로부터 N을 입력받습니다. 여기서 N은 과목의 개수를 나타냅니다. 예제 입력 1에서는 3이 해당됩니다.

그리고 N번 반복하면서 각 과목의 점수를 입력받는 부분은 다음과 같습니다:

java

for (int i = 0; i < N; i++) {  // N번 반복합니다.
    scores[i] = sc.nextInt();  // 각 과목의 점수를 입력받습니다.
    // ...
}


이 부분에서는 N번 반복하면서 nextInt() 메서드를 호출하여 각 과목의 점수를 입력받습니다. 이때 scores [i]에 각 과목의 점수를 저장합니다. 예제 입력 1에서는 40, 80, 60이 해당됩니다.

plaintext

[사용자 입력]
3
40 80 60


[코드 실행 과정]

1. int N = sc.nextInt();  // N에 3을 입력받습니다.
2. for (int i = 0; i < N; i++) {  // 3번 반복합니다.
   1) scores[0] = sc.nextInt();  // scores[0]에 40을 입력받습니다.
   2) scores[1] = sc.nextInt();  // scores[1]에 80을 입력받습니다.
   3) scores[2] = sc.nextInt();  // scores[2]에 60을 입력받습니다.
}

 

 

 

 

 

 

double 로 사용하는 이유는 무엇인가?

 

세준이의 점수를 새로 계산할 때, score/max*100 연산을 수행합니다. 

이때, score와 max가 정수형(int)이라면, score/max는 정수 나눗셈이 되어 소수점 이하의 값이 버려집니다. 따라서, 이 연산을 정확하게 수행하기 위해 score와 max는 double 자료형으로 선언되어야 합니다.

 

 50 (점수)
    ↓ (최대 점수로 나눔)
0.7142857142857143
    ↓ (100을 곱함)
71.42857142857143 (조작된 점수)


위스트그림은 세준이의 수학 점수가 50점, 최대 점수가 70점인 경우를 예로 들었습니다.

먼, 점수를 최 점수로 나누는 연산을 수행합니다. 이때 결과는 실수값이 됩니다. 

(50/70 = 0.7142857142857143)
그런 다음, 이 값을 100으로 곱하여 새로운 점수를 계산합니다. 이 결과 역시 실수값입니다. (0.7147142857143 * 100 = 71.42857142857143)
따라서 이러한 연산을 정확하게 수행하려면 실수 자료형이 필요하며, Java에서는 double 자료형이 이를 위해 주로 사용됩니다. 실수를 표현할 때 double은 float에 비해 더 넓은 범위를 가지며, 더 정확한 값을 나타낼 수 있기 때문에 본 문제에서 double을 선택하였습니다.

 

 

 

 

 

 

향상된 for 문에 대한 조건식은 무엇인가?

 

향상된 for문에 대해서 

향상된 for문에서는 특정 조건을 만족하면 반복을 중단하는 방법으로 break 문을 사용할 수 있습니다. 그러나 break 문은 가장 가까운 반복문을 빠져나가기 때문에, 중첩된 반복문에서는 사용에 주의해야 합니다.

java

for (int number : numbers) {
    if (number == target) {
        break;  // target을 찾으면 반복문을 종료합니다.
    }
}




 

 

 

 

 

 

 

향상된 for문과 스트림에 대해서

 

향상된 for문과 스트림은 모두 Java에서 제공하는 반복 구조입니다. 두 방법 모두 배열이나 컬렉션의 요소를 순회하는 데 사용되지만, 사용 방법과 기능에는 몇 가지 차이점이 있습니다.

향상된 for문은 간단하고 직관적인 구조로, 배열이나 컬렉션의 모든 요소를 순회하는 데 사용됩니다. 특정 조건에 따라 반복을 제어하려면 if문과 break문을 사용해야 합니다.

Java

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    if (number % 2 == 0) {
        System.out.println(number);
        break;
    }
}



스트림은 Java 8에서 도입된 기능으로, 데이터의 흐름을 표현하며 다양한 연산을 통해 복잡한 데이터 처리를 수행할 수 있습니다. filter, map, reduce 등의 메서드를 제공하며, 이를 통해 조건에 따른 필터링, 변환, 집계 등의 작업을 수행할 수 있습니다.

Java

int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
      .filter(number -> number % 2 == 0)
      .forEach(System.out::println);

 





장단점:

향상된 for문:

장점: 간단하고 직관적인 구조로, 코드를 이해하고 작성하기 쉽습니다.
단점: 복잡한 데이터 처리를 위해 if문, for문 등을 중첩해서 사용해야 할 수 있습니다.
스트림:

장점: 다양한 연산을 제공하여 복잡한 데이터 처리를 간결하게 수행할 수 있습니다. 또한, 병렬 처리를 지원하여 대량의 데이터 처리에 유리합니다.
단점: 처음에는 사용 방법이나 문법이 어려울 수 있습니다. 또한, 잘못 사용하면 성능이 저하될 수 있습니다.
이렇게 향상된 for문과 스트림은 각각의 장단점이 있으므로, 상황에 따라 적절한 방법을 선택하여 사용하면 됩니다.

향상된 for문:

numbers = [1, 2, 3, 4, 5]
for number in numbers:
  |
  v
  1 -> 2 -> 3 -> 4 -> 5


스트림:

numbers = [1, 2, 3, 4, 5]
stream = numbers.stream().filter(n -> n % 2 == 0)
  |
  v
  2 ------> 4

 

 

 

 

 

반응형

댓글