2024. 12. 9. 17:38ㆍ코딩테스트 리뷰(프로그래머스)
Java 알아보기
내일 배움 캠프) 사전캠프의 Java 알아보기 내용
1) 반복문 연습하기 Part 1
public class Main {
public static void main(String[] args) {
for( int i = 1; i <= 100; i++) System.out.println(i);
}
}
2) 반복문 연습하기 Part 2
public class Main {
public static void main(String[] args) {
for( int i = 1; i <= 100; i++) if( i % 2 == 0 ) System.out.println(i);
}
}
3) 반복문 연습하기 Part 3
public class Main {
public static void main(String[] args) {
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + "*" + j + "=" + i * j);
}
System.out.println();
}
}
}
Lv1) 랜덤 닉네임 생성기
public class Main {
public static void main(String[] args) {
List<String> result = new ArrayList<>(3);
String[] prefix1 = {"기절초풍", "멋있는", "재미있는"};
String[] prefix2 = {"도전적인", "노란색의", "바보같은"};
String[] nickname = {"돌고래", "개발자", "오랑우탄"};
result.add(prefix1[(int) (Math.random() * 3) ]);
result.add(prefix2[(int) (Math.random() * 3) ]);
result.add(nickname[(int) (Math.random() * 3) ]);
for (String s : result) {
System.out.println(s);
}
}
}
참조 : https://priming.tistory.com/99
[Java] 난수 생성 및 범위 지정(Math.random, java.util.Random 사용)
자바에서 난수를 생성하는 방법은 대표적으로 Math.random() 메서드를 사용하는 방법, java.util.Random 클래스를 사용하는 방법 두가지가 있습니다. Math.random난수 생성 기본 사용법double random = Math.random
priming.tistory.com
Lv2) 스파르타 자판기
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Map<String, Integer> menu = new HashMap<>();
menu.put("sider", 1700);
menu.put("cola", 1900);
menu.put("sickke", 2500);
menu.put("eye of sol", 3000);
previewMenu(menu);
String item;
String money;
do {
System.out.println("구매하실 음료를 입력해주세요.");
Scanner sc = new Scanner(System.in);
item = sc.nextLine();
System.out.println("돈을 넣어주세요.");
money = sc.nextLine();
} while(item.isEmpty() || money.isEmpty());
if (Integer.parseInt(money) < menu.get(item)) {
System.out.println("돈이 부족합니다.");
} else {
System.out.println(Integer.parseInt(money) - menu.get(item));
}
}
private static void previewMenu(Map<String, Integer> menu) {
for( Map.Entry<String, Integer> a : menu.entrySet() ) {
System.out.println(a.getKey() + ": " + a.getValue());
}
}
}
맵으로 정보를 미리 추가를 해두고, 출력을 메소드를 하나 새롭게 만들어서 출력을 하는 법에 대해서 잘 몰라서 찾아보았다.
Map 타입인 menu를 넘겨줘서 menu 에서 전체 키값을 뽑아내는 KeySet() 으로 값을 얻고
for( String item : menu.keySet() ) {
System.out.println(item + ": " + menu.get(item) );
}
이런식으로 사용도 가능하겠다.
참조 : https://velog.io/@woply/HashMap-%EC%A0%84%EC%B2%B4-%EA%B0%92%EC%9D%84-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
HashMap - 전체 값을 출력하는 4가지 방법
HashMap을 사용하며 Map에 저장된 전체 값을 출력하는 다양한 방법을 정리하였다.
velog.io
Lv3) 단어 맞추기 게임
import java.util.Scanner;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
String[] word = {"BAKERY", "PICTURE", "EYES", "TRUE", "FALSE"};
Scanner sc = new Scanner(System.in);
int count = 9;
int answerNum = 0;
int randomWord = (int) (Math.random() * word.length);
String[] result = word[randomWord].split("");
String[] answer = Stream.generate(() -> "_").limit(result.length).toArray(String[]::new);
do {
System.out.println("현재 남은 기회 : " + count--);
System.out.println("A-Z 중 하나를 입력해주세요 : ");
String temp = sc.nextLine();
if( temp.length() != 1 || !(65 <= temp.charAt(0) && temp.charAt(0) <= 90) ) {
System.out.println("정답에 포함된 알파벳이 아닙니다. 기회가 1 차감됩니다.");
continue;
}
for( int i = 0; i < result.length; i++ ) {
if( result[i].equals(temp) ) {
answerNum++;
answer[i] = temp;
}
}
StringBuilder sb = new StringBuilder();
sb.append('[');
for( String a : answer ) {
sb.append("'").append(a).append("',");
}
sb.deleteCharAt( sb.length()-1 );
sb.append(']');
System.out.println(sb.toString());
} while( answerNum != result.length && count > 0);
if( count == 0 ) {
System.out.println("남은 기회가 없습니다.");
System.out.println("정답은 " + word[randomWord] + "입니다.");
} else if( answerNum == result.length ) {
System.out.println("정답입니다.");
}
}
}
단어 부분만 사전API 에서 가져올 수 있다면 프로그램을 하나 만들었다고 생각이 든다.
Stream API가 성능이 안좋다고 하지만, 간단한 초기화에서는 편하다고 생각한다.
원래 코드에서는 System.out.println() 을 많이 사용했으나, 저 부분은 한번에 출력을 해도 상관이 없어서
String을 저장했다가 한번에 출력을 하는 편이 좋다고 생각을 하였다.
StringBuffer을 사용하면 저장을 했다가 한번에 출력이 가능하였다.
참조 : https://adjh54.tistory.com/129
[Java] String, StringBuffer, StringBuilder 이해하기
해당 페이지에서는 String과 StringBuffer, StringBuilder에 대해서 이해하고 각각의 차이점과 언제 사용해야 하는지에 대해 이해하기 위한 글입니다. 1) String, StringBuffer, StringBuilder 💡 String이란? - Java에
adjh54.tistory.com
보너스) 가위 바위 보
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String[] gifts = {"꽝", "곰돌이 인형", "스파르타 랜드 입장권", "스파르타 캐니언 항공 투어권", "호텔 스파르타 숙박권", "스파르테이트 항공권"};
Map<Integer, String> map1 = new HashMap<>();
map1.put(0, "가위");
map1.put(1, "바위");
map1.put(2, "보");
Map<String, String> map2 = new HashMap<>();
map2.put("가위", "021");
map2.put("바위", "102");
map2.put("보", "210");
Scanner sc = new Scanner(System.in);
int win = 0;
for( int i = 0 ; i < 5; i++) {
String user = "";
while( true ) {
System.out.print("가위, 바위, 보 중 하나를 입력해주세요 : ");
user = sc.nextLine();
if (user.equals("가위") || user.equals("바위") || user.equals("보")) {
break;
} else {
System.out.println("잘못된 입력입니다!");
}
}
String status = map2.get(user);
int randomNum = (int) (Math.random() * 3);
String computer = map1.get(randomNum);
char a = status.charAt(randomNum);
System.out.println("컴퓨터는 " + computer + "를 냈습니다.");
switch(a) {
case '0':
System.out.println("비겼습니다.");
break;
case '1':
System.out.println(++win + "번 이기셨습니다.");
break;
case '2':
System.out.println("졌습니다.");
break;
}
}
System.out.println(win + "번 이기셨습니다. " + "경품으로 " + gifts[win] + "을(를) 드리겠습니다.");
}
}
풀이 과정
if 문을 많이 사용하기 싫어서 생각을 해보았다. 간단하게 생각을 해보면 유저가 무엇을 내든 선택지는 3개 밖에 안주어진다. [ 비긴다. 이긴다, 진다 ] 그렇다면 각각의 상태를 숫자로 생각을 해보자. 비긴다 = 0 이긴다 = 1 진다 = 2 그러면 각 가위 바위 보 마다 상태값이 생기게된다. map2.put("가위", "021"); map2.put("바위", "102"); map2.put("보", "210"); 그것이 map2 에 해당한다. 각각 옆에 숫자 0번은 가위에 해당하는 값, 1번은 바위에 해당 하는 값, 2번은 보에 해당하는 값이 된다. 그렇기 때문에 컴퓨터의 0~2번의 랜덤 숫자에 의해 상태값만 뽑아오면 값이 나오게 된다. 마지막에 상품관련 정보가 적혀있지 않아서 정답을에서 찾아서 적었다. |
'코딩테스트 리뷰(프로그래머스)' 카테고리의 다른 글
TIL) 프로그래밍에서 조합은 어떻게 사용을 하는가? (6) | 2024.12.26 |
---|