[문제] https://www.acmicpc.net/problem/11382
V1 : 스트림 사용 안함
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] inputBits = sc.nextLine().split(" ");
long sum = 0;
for (String inputBit : inputBits) {
sum += Long.parseLong(inputBit);
}
System.out.println(sum);
sc.close();
}
}
V2 : 스트림 사용
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] inputBits = sc.nextLine().split(" ");
long sum = Arrays.stream(inputBits)
.mapToLong(e -> Long.parseLong(e)) //스트림 내 요소들을 Long으로 변환
.sum();
System.out.println(sum);
sc.close();
}
}
peek
: 스트림 내 요소들을 대상으로 연산을 수행하지 않고 인자로 받은 람다식을 수행
map
: 스트림 내 요소들을 하나씩 특정 값으로 변환
sorted
: 스트림 내 요소들을 비교하여 정렬
filter
: 스트림 내 요소들을 하나씩 평가해서 조건에 맞춰서 걸러냄
[출력 결과]
숫자를 입력해주세요(-1 : 종료) : 11
숫자를 입력해주세요(-1 : 종료) : 2
숫자를 입력해주세요(-1 : 종료) : 3
숫자를 입력해주세요(-1 : 종료) : 44
숫자를 입력해주세요(-1 : 종료) : 5
숫자를 입력해주세요(-1 : 종료) : 6
숫자를 입력해주세요(-1 : 종료) : 0
숫자를 입력해주세요(-1 : 종료) : 7
숫자를 입력해주세요(-1 : 종료) : -7
숫자를 입력해주세요(-1 : 종료) : -1
입력을 종료합니다.
입력한 숫자(오름차순) : -7, 0, 2, 3, 5, 6, 7, 11, 44
프로그램을 종료합니다.
[정답]
V1 : ArrayList 사용. 스트림 사용 안함
class Sol {
public void run() {
Scanner sc = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
while (true) {
System.out.printf("숫자를 입력해주세요(-1 : 종료) : ");
int num = sc.nextInt();
if (num == -1) {
System.out.println("입력을 종료합니다.");
break;
}
numbers.add(num);
}
Collections.sort(numbers);
StringBuilder sb = new StringBuilder();
for (int number : numbers) {
if (sb.isEmpty() == false) {
sb.append(", ");
}
sb.append(number);
}
System.out.printf("입력한 숫자(오름차순) : %s\n", sb);
System.out.println("프로그램을 종료합니다.");
sc.close();
}
}
V2 : ArrayList 사용. 스트림 사용
class Sol {
public void run() {
Scanner sc = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
while (true) {
System.out.printf("숫자를 입력해주세요(-1 : 종료) : ");
int num = sc.nextInt();
if (num == -1) {
System.out.println("입력을 종료합니다.");
break;
}
numbers.add(num);
}
String str = numbers
.stream()
.sorted() //정렬
.map(e -> "" + e) //스트림 내 요소들을 문자열형태로
.collect(Collectors.joining(", ")); 각각 ', '를 붙여줌
System.out.printf("입력한 숫자(오름차순) : %s\n", str);
System.out.println("프로그램을 종료합니다.");
sc.close();
}
}
배열과 비슷한데 배열은 크기를 지정해줘야하지만, ArrayList는 자동으로 크기가 늘어남.(마법의 장바구니)
class Main {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println(arr[0] + arr[1] + arr[2]);
System.out.println(arr.length); // 고정길이
// ArrayList<Integer> al = new ArrayList<Integer>(); // v1
// List<Integer> al = new ArrayList<Integer>(); // v2
List<Integer> al = new ArrayList<>(); // v3
al.add(10); // 0
al.add(20); // 1
al.add(30); // 2
System.out.println(al.get(0) + al.get(1) + al.get(2));
System.out.println(al.size()); // 가변, 길이 : 3
al.add(40); // 3
System.out.println(al.size()); // 가변, 길이 : 4
}
}
Collections.sort(al, (e2, e1) -> {
// return e2 > e1 ? 1 : -1; // v1 오름차순 정렬
// return e2 > e1 ? -1 : 1; // v2 내림차순 정렬
// return e2 - e1; // v3 오름차순 정렬
return e1 - e2; // v4 내림차순 정렬
});
Collections.sort(al, (e2, e1) -> e1 - e2); // 이런식으로 생략가능
e2 - e1
: 오름차순
e1 - e2
: 내림차순
ArrayList에 커스텀 키 기능을 추가함
// 리스트 장점 : 넣을때 편하고, 접근할 때 귀찮다.
List<Integer> ages = new ArrayList<>();
ages.add(20); // index : 0
ages.add(25); // index : 1
ages.add(30); // index : 2
System.out.printf("철수나이 : %d\n", ages.get(0));
System.out.printf("영수나이 : %d\n", ages.get(2));
System.out.printf("영희나이 : %d\n", ages.get(1));
// 맵 장점 : 넣을때 귀찮고, 접근할 때 편하다.
Map<String, Integer> agesMap = new HashMap<>();
agesMap.put("철수", 20); // index : 철수
agesMap.put("영희", 25); // index : 영희
agesMap.put("영수", 30); // index : 영수
System.out.printf("철수나이 : %d\n", agesMap.get("철수"));
System.out.printf("영수나이 : %d\n", agesMap.get("영수"));
System.out.printf("영희나이 : %d\n", agesMap.get("영희"));
list는 넣을 대 편하고, 접근할 때 귀찮다.
HashMap은 넣을 때 귀찮고, 접근할 때 편하다.
예제
[사람1 정보]
이름 : 홍길동
나이 : 22
키 : 170.5[사람2 정보]
이름 : 홍길순
나이 : 25
키 : 162.4사람 정보가 출력될 수 있도록 작성
class Main {
public static void main(String[] args) {
// new Sol1().run();
new Sol2().run();
}
}
class Sol1 { //클래스 사용
public void run() {
Person p1 = new Person("홍길동", 22, 170.5);
Person p2 = new Person("홍길순", 25, 162.4);
System.out.println(p1);
System.out.println(p2);
}
}
class Person {
private String name;
private int age;
private double height;
public Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
class Sol2 { //HashMap 사용
public void run() {
Map<String, Object> p1 = new HashMap<>();
p1.put("이름", "홍길동");
p1.put("나이", 22);
p1.put("키", 170.5);
Map<String, Object> p2 = new HashMap<>();
p2.put("이름", "홍길순");
p2.put("나이", 25);
p2.put("키", 162.4);
System.out.println(p1);
System.out.println(p2);
}
}
[문제] https://codeup.kr/problem.php?id=1805
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
List<Device> devices = new ArrayList<>();
for (int i = 0; i < count; i++) {
int id = sc.nextInt();
int gas = sc.nextInt();
devices.add(new Device(id, gas));
}
sc.close();
devices = devices
.stream()
.sorted((e2, e1) -> e2.getId() - e1.getId())
.collect(Collectors.toList());
for (Device device : devices) {
System.out.printf("%d %d\n", device.getId(), device.getGas());
}
}
}
class Device {
private int id;
private int gas;
public int getId() {
return id;
}
public int getGas() {
return gas;
}
public Device(int id, int gas) {
this.id = id;
this.gas = gas;
}
@Override
public String toString() {
return "Device{" +
"id=" + id +
", gas=" + gas +
'}';
}
}