Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- X
- 백준 7579
- 파이썬
- 2156
- 동적계획법
- 포도주시식
- nodejs
- 크롬 익스텐션
- 자료구조
- discord.js
- 프로그래머스 #정수삼각형 #동적계획법
- 백준 #7568번 #파이썬 #동적계획법
- C언어로 쉽게 풀어쓴 자료구조
- popup
- 갓생
- react
- Message Passing
- 공부시간측정어플
- 크롬 확장자
- TypeScript
- content script
- 디스코드 봇
- 캠스터디
- supabase
- background script
- webpack
- 백준
- Chrome Extension
Archives
- Today
- Total
히치키치
[명품 자바 에센셜] 실습문제 7장 본문
요약
- Vector는
null
추가 가능 컬렉션
: 요소의 리스트 / 집합 관리 자료구조, 크기 자동 조절 가능제네릭
: 일반화 시킨 타입의 매개 변수를 이용해 클래스, 인터페이스, 메소드를 일반화함, 구체적인 타입 지정해 특정 타입으로만 사용 가능ArrayList<_E_ >
는Vector<_E_ >
와 달리멀티스레드 동기화
지원 XVector <Integer> v=new Vector<Integer>(3);
에서capacity
는 3이지만size
는 아직 추가된 원소가 없어 0임.add()
와.get()
에서 발생하는 자동 박싱/언박싱if (this.x.equals(x))
로 값 비교해야함.if(this.x==x)
는 레퍼런스 비교임iterator
돌면서 최대/최소 구할 때 범위와 index 설정 주의
1번
Scanner를 사용하여 5개의 실수 값을 사용자로부터 입력받아 벡터에 저장하라. 그리고 나서 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.
import java.util.*;
public class one {
public static void main(String[] args) {
Vector<Float> v=new Vector<Float>();
Scanner sc=new Scanner(System.in);
for(int i=0;i<5;i++) {
v.add(sc.nextFloat());
}
float max=-1000000000;
for(int i=0;i<4;i++) {
//비교하는 index : (0,1) (1,2) (2,3) (3,4)
if(v.get(i)>v.get(i+1)) {
max=v.get(i);
}
}
System.out.println("가장 큰 수는 " + max);
}
}
2번
Scanner를 사용하여 학점 (‘A’, ‘B’, ‘C’, ‘D’, ‘F’)을 5개만 문자로 입력받아 ArrayList에 저장하라. 그리고 나서 다시 ArrayList를 검색하여 5개의 학점을 점수(A = 4.0, B = 3.0, C = 2.0, E = 1.0, F = 0.0)로 변환하여 출력하는 프로그램을 작성하라.
import java.util.*;
public class two {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<Character>grade=new ArrayList<Character>();
//!! char -> Character로 표현하는 기억!!
System.out.print("학점 5개 입력>>");
for(int i=0;i<5;i++) {//성적 5개 입력
String string=sc.next();
//!! String으로 입력받은 단어에서 인텍스 0인 글자 따로 char로 가져오기!!
char alpha=string.charAt(0);
//grade ArrayList에 입력
grade.add(alpha);
}
for(int i=0;i<grade.size();i++) {
//!! iteration 횟수 5로 하기보다는 .size() 이용하기 !!
if(grade.get(i)=='A') {
System.out.print(4.0);
}
else if(grade.get(i)=='B') {
System.out.print(3.0);
}
else if(grade.get(i)=='C') {
System.out.print(2.0);
}
else if (grade.get(i)=='D') {
System.out.print(1.0);
}
else if(grade.get(i)=='F') {
System.out.print(0.0);
}
else {
System.out.print("잘못된 입력입니다.");
}
System.out.print(" ");
}
}
}
3번
HashMap<String, Integer> 컬렉션을 생성하고 “에스프레소”는 2000, “아메리카노”는 2500, “카푸치노”는 3000, “카페라테”는 3500을 저장하라. 그리고 다음과 같이 음료수 이름을 입력받으면 HashMap에서 검색하여 가격을 출력하라.
import java.util.*;
public class three {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
HashMap<String, Integer>menu=new HashMap<String, Integer>();
menu.put("에스프레소", 2000);
menu.put("아메리카노", 2500);
menu.put("카푸치노", 3000);
menu.put("카페라떼", 3500);
Set<String>keys=menu.keySet();
System.out.println("에스프레소, 카푸치노, 아메리카노, 카페라떼 있습니다.");
while(true) {
Iterator<String>it=keys.iterator();
//!! iterator 한 바퀴 다 돌고 새롭게 만들어 줘야 또 돌면서 value값 탐색 가능 !!
System.out.print("주문>>");
String order=sc.next();
if(order.equals("그만")) {
System.exit(1);
}
else {
while(it.hasNext()) {
String key=it.next();
if(order.equals(key)) {
System.out.println(order+"는 "+menu.get(key)+"원 입니다.");
}
}
}
}
}
}
4번
한 어린이의 키를 2000년부터 2009년 사이에 1년 단위로 입력받아 벡터에 저장하라. 그리고 가장 키가 많이 자란 연도를 출력하라.
import java.util.*;
public class four {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Vector<Float>height=new Vector<Float>();
System.out.println("2000~2009년까지 1년 단위로 키 입력>>");
for(int i=0;i<10;i++) {
height.add(sc.nextFloat());
}
float max_growth=-1000000000;
int max_idx=-1;
for(int i=0;i<9;i++) {
float growth=height.get(i+1)-height.get(i);
if(growth>max_growth) {
max_growth=growth;
max_idx=i;
}
}
System.out.println("가장 많이 키가 자란 년도는 200"+max_idx+"년 "+max_growth+"cm");
}
}
5번
5개 나라 이름과 인구를 입력받아 해시맵에 저장하고, 가장 인구가 많은 나라를 검색하여 출력하는 프로그램을 작성하라. 이때 다음 해시맵을 이용하라.
import java.util.*;
public class five {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
HashMap<String,Integer> hashmap=new HashMap<String,Integer>();
System.out.println("나라 이름과 인구를 5개 입력하세요.");
for(int i=0;i<5;i++) {
System.out.print("나라 이름, 인구 >>");
hashmap.put(sc.next(),sc.nextInt()); //HashMap은 add가 아니라 put
}
Set<String>keys=hashmap.keySet();
Iterator<String>it=keys.iterator();
String max_nation=null;
int ppl_max_cnt=-100000000;
while(it.hasNext()){
String key=it.next();
if(hashmap.get(key)>ppl_max_cnt) {
max_nation=key;
ppl_max_cnt=hashmap.get(key);
}
}
System.out.println("제일 인구가 많은 나라는 ("+max_nation+", "+ppl_max_cnt+")");
}
}
6번
고객의 이름과 포인트 점수를 관리하는 프로그램을 해시맵을 이용하여 작성하라. 이 프로그램은 고객의 이름과 포인트를 누적하여 관리한다. 한 고객의 입력이 끝나면 현재까지의 모든 고객의 포인트 점수를 출력한다.
import java.util.*;
public class six {
public static void main(String[] args) {
System.out.println("** 포인트 관리 프로그램입니다. **");
HashMap<String,Integer>info=new HashMap<String,Integer>();
Scanner sc=new Scanner(System.in);
while(true) {
System.out.print("이름과 포인트 입력>>");
String name=sc.next();
/*name받고 연이어서 point받으면 안됨
이유 : name에 exit들어오면 프로그램 종료 되어야 함
1. name 입력 받음
1-1. exit임 -> 프로그램 종료
1-2. 이름임 -> 포인트 입력받음
2.포인트 관리 시작
2-1. 원래 있던 이름임
2-2. 새롭게 추가된 이름임
3. 목록 출력*/
if(name.equals("exit")) { //1.1의 경우
System.out.println("프로그램을 종료합니다....");
System.exit(1);
}
else {//1.2의 경우
int point=sc.nextInt(); //포인트 입력 받음
//2. 포인트 관리 시작
if(info.containsKey(name)) { //2.1의 경우
/*constainKey(key) : 해당 키 값 있으면 true 반환
입력 받은 name이 이미 HashMap에 있음
->get()으로 받은 value에 이번에 새로운 point 추가해서 put*/
info.put(name, info.get(name)+point);
}
else {//2.2의 경우
info.put(name, point);//새로운 name과 point 쌍 추가
}
//3. 목록 출력
Set<String>keys=info.keySet(); //key 집합
Iterator<String>it=keys.iterator(); //iterator 생성
while(it.hasNext()) {
String key=it.next();//key값 순차적으로 받음
int value=info.get(key); //받은 key값으로 value 값 받기
System.out.print("("+key+","+value+")"); //출력
}
System.out.println();
/*목록 다 출력했으면 줄바꿈입력 -> 다음 줄부터 다시 이름과 포인트 입력 받기*/
}
}
}
}
7번
Location 클래스는 2차원 평면에서 하나의 위치(x, y)를 표현한다. Location 객체로 쥐가 이동한 각 위치를 저장하고 이들로부터 총 이동 거리를 구하고자 한다. ArrayList 컬렉션에 쥐의 위치(Location 객체)를 5개 입력받아 삽입한 후 총 길이를 구하여라. 시작 위치는 (0, 0)이며, (0, 0) 위치로 돌아온다.
package java_7;
/*Location 클래스는 2차원 평면에서 하나의 위치(x, y)를 표현한다.
* Location 객체로 쥐가 이동한 각 위치를 저장하고 이들로부터 총 이동 거리를 구하고자 한다.
* ArrayList 컬렉션에 쥐의 위치(Location 객체)를 5개 입력받아 삽입한 후 총 길이를 구하여라.
* 시작 위치는 (0, 0)이며, (0, 0) 위치로 돌아온다.*/
import java.util.*;
import java.lang.Math;
class Location{
private int x,y; /*외부 클래스 안에 변수에 대해서 private 처리*/
public Location(int x, int y) {
this.x=x;
this.y=y;
}
public int getX() {
return x;/*return this.x 말고 return x*/
}
public int getY() {
return y;
}
}
public class seven {
public static void main(String[] args) {
ArrayList<Location>Loc=new ArrayList<Location>();
Scanner sc=new Scanner(System.in);
System.out.println("쥐가 이동한 위치(x,y)를 5개 입력하여라");
Loc.add(new Location(0,0));//시작점 (0,0)
for(int i=0;i<5;i++) {
Loc.add(new Location(sc.nextInt(),sc.nextInt())); // 경로 좌표 5개
}
Loc.add(new Location(0,0));//반환점 (0,0)
double dis_total=0;
for(int i=0;i<Loc.size()-1;i++) {//iteration 범위 주의
/*(int i=1;i<Loc.size();i++)로 하고
Loc.get(i-1)과 Loc.get(i)로 불러와도 됨 */
Location first=Loc.get(i);
Location second=Loc.get(i+1);
double dis_x=Math.pow(-first.getX()+second.getX(),2);
double dis_y=Math.pow(-first.getY()+second.getY(),2);
dis_total+=Math.sqrt(dis_x+dis_y);
}
System.out.println("총 이동거리는 "+dis_total);
sc.close(); //잊지 말자 scanner close()
}
}
bonus_1
아래의 HV 클래스는 해시맵을 인자로 받아 벡터를 리턴하는 hashToVector() 메소드를 가지고 있다. hashToVector()는 해시맵 내의 ‘값(value)’을 모두 Vector에 삽입하여 리턴한다. 빈칸을 완성하라.
import java.util.*;
public class HV {
public static Vector<String> hashToVector(HashMap<String,String> h){
Vector<String>v=new Vector<String>();//백터 생성
Set<String>s=h.keySet();//해시맵 h로부터 키 set 컬랙션 s 얻기
Iterator<String> it=s.iterator();
while(it.hasNext()) {
String key=it.next();
v.add(h.get(key));//'값'을 벡터에 삽입
}
return v;//return 문
}
public static void main(String[] args) {
HashMap<String,String> h=new HashMap<String,String>(); //해시맵 h 생성
h.put("범죄", "112");
h.put("화재", "119");
h.put("전화번호","114");
Vector<String>v=hashToVector(h); //hashToVector() 호출
for(int n=0;n<v.size();n++) {
//v의 모든 요소에 대해 반복
System.out.print(v.get(n)+" ");
}
}
}
'명품 자바 에센셜' 카테고리의 다른 글
[명품 자바 에센셜] 실습문제 9장 (0) | 2021.09.01 |
---|---|
[명품 자바 에센셜] 실습문제 8장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 6장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 5장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 3장 (0) | 2021.04.12 |
Comments