전체 글
-
[모두의마블/통계/코딩] 현자의 마법진 8개 모으기 위한 평균 다이아 갯수2022.04.27
-
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바)2022.03.17
-
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바)2022.03.17
-
[Java/자바] 람다식(람다 표현식) 과 람다식 예제2022.01.03
-
[Java/자바] 초간단 멀티 스레드 예제 및 구현2021.12.24
-
[BOJ/백준] 2557번 Hello World 문제 풀이 (JAVA/자바)2021.12.22
-
[BOJ/백준] 1000번 A+B 문제 풀이 (JAVA/자바)2021.12.22
[모두의마블/통계/코딩] 현자의 마법진 8개 모으기 위한 평균 다이아 갯수
모두의 마블 이벤트에 참여하기 위해서는 다이아가 얼마나 필요할지 계산하기 너무 애매했다.
그래서 내가 함 코딩으로 통계를 내보았다.
현자의 마법진 이벤트 상세 페이지 : https://cafe.naver.com/momakakao/13007245
현자 마법진 8개를 모으면 원하는 행템을 얻을 수 있는 이벤트인데 확률을 참조로 평균 다이아가 몇개를 소비할지 계산해보았는데 1000번 반복 통계를 내보았더니 약 25000개 +- 1000개 정도는 필요했다.
더 테스트를 원하시면 이 코드를 활용하여 통계를 내보자 ! 자세한 설명은 소스코드 주석으로 달아놨다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import java.util.Random;
public class Main3 {
public static void main(String[] args) {
Random ran = new Random();
int ACount; // A마석
int SPlusMagicCount; // S+현자의 마법진 갯수
int SupertotalSpendDia; // 슈퍼 프리미엄 행템 뽑기에 사용된 다이아 갯수
int SPlusPercentage; // A 마석 교환으로 S+ 현자 마법진 나올 확률
int averageDiaSpend = 0; // 평균적으로 다이아 소모 비용
for (int i = 0; i < 1000; i++) { // 1000번 반복
// 초기화
ACount = 0;
SPlusMagicCount = 0;
SupertotalSpendDia = 0;
int SuperPercentage ; // 슈퍼 행템 뽑기에서 마석 나올 확률
while(SPlusMagicCount<8) { // 현자의 마법진 8개를 모아야 하는 경우
SupertotalSpendDia += 1000; // 슈퍼 행템 뽑기에 다이아 사용
for (int j = 0; j < 10; j++) { // 슈퍼 행템 10개 뽑기
SuperPercentage = ran.nextInt(100)+1;
if(SuperPercentage <=22) { // 슈퍼 행템 뽑기에서 마석 나올 확률 : 22%
ACount ++; // 마석 획득
}
}
while(ACount>6) { // 마석이 6개 이상이면 6개를 제거하고 S+ 현자 마법진을 뽑는다.
ACount -= 6;
SPlusPercentage = ran.nextInt(10)+1;
if(SPlusPercentage<=9) { // A 마석 교환으로 S+ 현자 마법진 나올 확률 90%
SPlusMagicCount++; // S+ 현자 마법진 획득
}
}
}
averageDiaSpend += SupertotalSpendDia;
}
averageDiaSpend /= 1000;
System.out.println("현자 마법진 8개를 모으기 위해서 소비한 평균 다이아 갯수 : "+averageDiaSpend);
}
}
|
cs |
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바)
1. 문제 1550번 16진수 단위 테스크 코드
문제 풀이
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바)
1. 문제 1550번 16진수 : 16진수의 개념을 알아야 되는 문제 이 문제를 풀면서 문제에 단위 테스트 코드를 적용해보았던 문제였다. 난이도 : 브론즈 V (solved.ac 티어) 문제 링크 : https://www.acmicpc.net/pro.
programming-enjoy.tistory.com
2. 단위 테스트 설명
먼저 단위 테스트 간략하게 설명하면
단위 테스트 : 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 , 하나의 기능 또는 메소드
백준 16진수 문제를 풀면서 내가 푼 소스 코드가 어디가 틀렸는지 알 수 없어서 하나하나 테스트하기에 까다로워서 단위 테스트 코드를 한번 만들어 보았다.
3. 소스 코드
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
|
public class x16 {
// 16진수 단위 테스트
static int my16(String x16){
// x16 : 입력값, result : 출력값
// .. 내가 만든 소스코드 넣는 곳
return result;
}
public static void main(String[] args) {
for (int i = 0; i < 16777216; i++) {
if(my16(Integer.toHexString(i)) !=
Integer.parseInt(Integer.toHexString(i), 16) ) {
System.out.println("i : "+i);
System.out.println("my16 : "+ my16(Integer.toHexString(i)));
System.out.println("공식 16진수 변환 : "+Integer.toHexString(i)+" "
+"16>10진수 변환 "+Integer.parseInt(Integer.toHexString(i), 16));
break;
}
}
System.out.println("suscess");
}
}
|
cs |
my16 함수에 자기가 만든 소스를 넣어서 테스트 해볼 수 있는데 이전에 정답으로 풀었던 제 소스 코드를 넣으면
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
public class x16 {
// 16진수 단위 테스트
static int my16(String y){
int yChar;
int sum = 0;
int tenMultiply;
for (int i = 0; i < y.length(); i++) {
yChar = y.charAt(i)-0;
tenMultiply=1;
for (int j = y.length()-1; j > i; j--) {
tenMultiply *= 16;
}
if(48 < yChar && yChar < 58) {
sum += (yChar-48) * tenMultiply;
}
else if(64 < yChar && yChar < 71) {
sum += (yChar-55) * tenMultiply;
}
}
return sum;
}
public static void main(String[] args) {
for (int i = 0; i < 16777216; i++) {
if(my16(Integer.toHexString(i).toUpperCase()) !=
Integer.parseInt(Integer.toHexString(i).toUpperCase(), 16) ) {
System.out.println("index : "+i);
System.out.println("내가 만든 16진수 변환값 : "+ my16(Integer.toHexString(i).toUpperCase()));
System.out.println("공식 16진수 변환값 : "+Integer.toHexString(i).toUpperCase()+", "
+"공식 10진수 변환값 "+Integer.parseInt(Integer.toHexString(i).toUpperCase(), 16));
break;
}
}
System.out.println("suscess");
}
}
|
cs |
결과값 : 내가 정답으로 제출한 소스 코드로 함수에 넣어서 테스트해봤는데 정상적으로 if문에 걸리지 않아 테스트 완료되었다.
이처럼 sum 을 출력값 y를 입력값으로 두었는데 그값을 위처럼 바꿔주기만 하면 테스트 할 수 있다.
하지만 이게 틀린 소스 코드라면?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
public class x16 {
// 16진수 단위 테스트
static int my16(String y){
int yChar;
int sum = 0;
int tenMultiply;
for (int i = 0; i < y.length(); i++) {
yChar = y.charAt(i)-0;
tenMultiply=1;
for (int j = y.length()-1; j > i; j--) {
tenMultiply *= 16;
}
if(48 < yChar && yChar < 58) {
sum += (yChar-48) * tenMultiply;
}
else if(64 < yChar && yChar < 71) {
sum += (yChar-56) * tenMultiply; // error
}
}
return sum;
}
public static void main(String[] args) {
for (int i = 0; i < 16777216; i++) {
if(my16(Integer.toHexString(i).toUpperCase()) !=
Integer.parseInt(Integer.toHexString(i).toUpperCase(), 16) ) {
System.out.println("index : "+i);
System.out.println("내가 만든 16진수 변환값 : "+ my16(Integer.toHexString(i).toUpperCase()));
System.out.println("공식 16진수 변환값 : "+Integer.toHexString(i).toUpperCase()+", "
+"공식 10진수 변환값 "+Integer.parseInt(Integer.toHexString(i).toUpperCase(), 16));
break;
}
}
System.out.println("suscess");
}
}
|
cs |
16진수 값에 -55 값에서 -56으로 바꿔주었다. 그 결과 A를 입력했을때 10으로 나오는게 아닌 9로 나온다
결과값
4. 단위 테스트 코드 설명
먼저 for문을 16777216번 돌리는 이유 : 백준 입력값 6글자로 제한되어 있어 16진수 최대값인 FFFFFF 변환하면 16777215이 최대값이기 때문이다.
Integer.toHexString(i) : 16진수 > 10진수 변환
toUpperCase() : toHexString 함수를 이용하면 16진수 문자열이 소문자로 나오는 값을 대문자로 변환
(백준에서는 대문자로 풀이)
Integer.parsInt(Integer.toHexString(i).toUpperCase(), 16) : pareInt(String, 16) ; 16진수 문자열을 10진수 값으로 변환
5. 결론
사실 16진수 문제는 Integer.pareInt로 간단하게 풀 수 있지만
이 문제의 자기가 풀어본 소스 코드가 틀리다면 어떤게 틀렸는지 확인하는것도 중요하다.
'백준 문제 풀이(Java)' 카테고리의 다른 글
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바) (0) | 2022.03.17 |
---|---|
[BOJ/백준] 2557번 Hello World 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1000번 A+B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1001번 A-B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바)
1. 문제 1550번 16진수 : 16진수의 개념을 알아야 되는 문제
이 문제를 풀면서 문제에 단위 테스트 코드를 적용해보았던 문제였다.
난이도 : 브론즈 V (solved.ac 티어)
16진수 단위 테스트 코드가 궁금하시면 아래 링크를 참조해주세요.
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바)
1. 문제 1550번 16진수 단위 테스크 코드 문제 풀이 [BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바) 1. 문제 1550번 16진수 : 16진수의 개념을 알아야 되는 문제 이 문제를 풀면서 문제에 단위 테스트 코드
programming-enjoy.tistory.com
문제 링크 : https://www.acmicpc.net/problem/1550
2. 문제 풀이
제 풀이는 BufferedReader(입력)와 BufferedWriter(출력), 16진수 개념, 아스키 코드(char) 를 이해해야 됩니다.
BufferedReader(입력)와 BufferedWriter(출력)는 백준에서 풀이할때 Scanner와 System.out 보다 더 빠르게 입출력하기 위해 사용했습니다. 이 글에선 따로 설명하진 않겠습니다.
tenMultiply는 16진수 지수로 곱하기 위한 수이며
String.charAt(index) 는 index 별로 아스키코드값을 얻을 수 있습니다.
아스키코드 표를 보시면 49~57는 1~9 숫자값을 나타냅니다. 0은 따로 계산할 필요 없어서 포함시키지 않았습니다.
또한 문제에 나오는 65~70는 A~F 값을 나타냅니다.
이를 이용하여 yChar-48 = 1~9 , yChar-55 = 10~15 값을 나타냅니다.
3. 소스 코드 및 풀이 인증
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
31
32
33
34
35
36
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String y = br.readLine();
int yChar;
long sum = 0;
int tenMultiply;
for (int i = 0; i < y.length(); i++) {
yChar = y.charAt(i)-0;
tenMultiply=1;
for (int j = y.length()-1; j > i; j--) {
tenMultiply *= 16;
}
if(48 < yChar && yChar < 58) {
sum += (yChar-48) * tenMultiply;
}
else if(64 < yChar && yChar < 71) {
sum += (yChar-55) * tenMultiply;
}
}
bw.write(sum+"\n");
bw.flush();
bw.close();
}
}
|
cs |
'백준 문제 풀이(Java)' 카테고리의 다른 글
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바) (0) | 2022.03.17 |
---|---|
[BOJ/백준] 2557번 Hello World 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1000번 A+B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1001번 A-B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[Java] BigDecimal divide 함수와 divideAndRemainder 함수
1. 개요
The method divide(BigDecimal, int) from the type BigDecimal is deprecated since version 9
The field BigDecimal.ROUND_DOWN is deprecated since version 9
이 두가지 경고는 위 사진과 같이 BigDecimal에서 divide 함수를 이용하려고 했는데
divide(BigDecimal, int) 와 BigDecimal.ROUND_DOWN (소수점 버림) 가 자바 9부터 사용하지 않는다고
경고가 나와 그걸 대체하기 위해서 알려주는 글이다.
2. 해결
BigDecimal[] divideAndRemainder 함수를 이용하여 선언하면 되는데
위 사진과 같이 첫번째 인덱스는 몫과 두번째 인덱스는 나머지를 가리킨다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] deleteQuietly 파일 삭제 및 폴더 삭제(하위 파일 및 폴더 포함) (0) | 2022.06.16 |
---|---|
[Java/자바] 람다식(람다 표현식) 과 람다식 예제 (0) | 2022.01.03 |
[Java/자바] Scanner(스캐너) 입력 / 예제 (0) | 2021.12.13 |
[Java/자바] import(임포트) 및 사용 예제 (0) | 2021.12.10 |
[intelliJ/Spring] intelliJ 홈페이지 설정 및 만들기 / 시작화면 만들기 / Welcome page 만들기
※ 개발 환경 설정: Java 11 버전과 intelliJ를 사용하여 구현했습니다.
1. 목적
intelliJ를 이용하여 프로젝트를 만들고 난 후 처음으로 페이지를 띄우고 싶은 분들을 위해 도움이 될까 적어본다.
2. 방법
사진과 같이 프로젝트를 만들고 난 후 src/main/resources/static 폴더에 index.html을 만들고 실행하고
localhost:8080 (포트별 다름) 에 들어가면 Hello World 글자가 띄워질 것이다.
링크 출처 : spring 공식 문서 참조
[Git] Error : Repository not found. (에러 해결법)
1. 오류
git 에서 push 할때 Repository not found 오류
remote: Repository not found.
fatal: repository '작업 경로 'not found
2. 원인
하나의 컴퓨터에서 기존에 사용하고 있는 github 아이디를 등록 하고 다른 아이디로 등록할 때 push하면 처음 등록한 아이디로 찾고 있어서 오류남
3. 해결법
1) 제어판의 자격 증명 관리자 windows로 들어간다.
2) github에 등록된 아이디를 현재 사용하고 있는 아이디로 재변경하면 끝 !
'프로그래밍 오류 해결' 카테고리의 다른 글
[Java/자바] 람다식(람다 표현식) 과 람다식 예제
1. 람다 함수 : 프로그래밍 언어 사용되는 개념으로 익명 함수를 지칭하는 용어
2. 람다식 예제 (스레드 예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class test {
public static void main(String[] args) {
// 기초 자바 문법
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello1");
}
});
thread.run();
// 람다식 문법
Thread thread2 = new Thread(()-> {
System.out.println("hello2");
});
thread2.run();
}
}
|
cs |
'프로그래밍 > Java' 카테고리의 다른 글
[Java] deleteQuietly 파일 삭제 및 폴더 삭제(하위 파일 및 폴더 포함) (0) | 2022.06.16 |
---|---|
[Java] BigDecimal divide 함수와 divideAndRemainder 함수 (0) | 2022.03.16 |
[Java/자바] Scanner(스캐너) 입력 / 예제 (0) | 2021.12.13 |
[Java/자바] import(임포트) 및 사용 예제 (0) | 2021.12.10 |
[Java/자바] 초간단 멀티 스레드 예제 및 구현
1. 구현 및 예제 소스 코드
멀티 스레드의 핵심적인 부분만 보여주도록 간단하게 구현했습니다.
총 3개의 java 파일로 구현했습니다. 2개의 스레드 클래스와 1개의 실행 클래스로 나뉘어집니다.
1) 메인 실행 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package Main;
public class Main {
public static void main(String[] args) {
Thread subTask1 = new run1();
Thread subTask2 = new run2();
subTask1.start();
subTask2.start();
}
}
|
cs |
2) 스레드 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package Main;
public class run1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("첫번째 스레드 i : "+ i);
}
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package Main;
public class run2 extends Thread {
@Override
public void run() {
for (int j = 0; j < 10000; j++) {
System.out.println("두번째 스레드 j : "+ j);
}
}
}
|
cs |
결과 화면
동시에 출력되고 있음을 볼 수 있다. 끄읏 !
[BOJ/백준] 2557번 Hello World 문제 풀이 (JAVA/자바)
1. 문제 : 2557번 Hello World : 출력의 기초가 되는 문제
많은 프로그래밍 언어 서적에서 맨 처음 소개하는 예제입니다.
난이도 : 브론즈 V (solved.ac 티어)
문제 링크 : https://www.acmicpc.net/problem/2557
2. 문제 풀이
이 문제는 출력하는 방법을 알면 풀 수 있는 문제이다.
3. 소스 코드 및 풀이 인증
1
2
3
4
5
6
7
8
|
public class Main{
public static void main(String[] args) {
System.out.print("Hello World!");
}
}
|
cs |
'백준 문제 풀이(Java)' 카테고리의 다른 글
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바) (0) | 2022.03.17 |
---|---|
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바) (0) | 2022.03.17 |
[BOJ/백준] 1000번 A+B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1001번 A-B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1000번 A+B 문제 풀이 (JAVA/자바)
1. 문제 : 1000번 A+B : 두 숫자를 입력받아 더하고 출력하는 문제
난이도 : 브론즈 V (solved.ac 티어)
문제 링크 : https://www.acmicpc.net/problem/1000
1000번: A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
2. 문제 풀이
이 문제는 키보드를 이용해 숫자를 입력하는 방법과 출력하는 방법만 알면 풀 수 있는 문제이다.
Scanner(입력)에 더 자세한 설명 : https://programming-enjoy.tistory.com/7
3. 소스 코드 및 풀이 인증
1
2
3
4
5
6
7
8
|
public class Main{
public static void main(String[] args) {
java.util.Scanner in=new java.util.Scanner(System.in);
int a=in.nextInt(); int b=in.nextInt();
System.out.println(a+b);
}
}
|
cs |
'백준 문제 풀이(Java)' 카테고리의 다른 글
[BOJ/백준] 1550번 16진수 단위 테스크 코드 (JAVA/자바) (0) | 2022.03.17 |
---|---|
[BOJ/백준] 1550번 16진수 문제 풀이 (JAVA/자바) (0) | 2022.03.17 |
[BOJ/백준] 2557번 Hello World 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |
[BOJ/백준] 1001번 A-B 문제 풀이 (JAVA/자바) (0) | 2021.12.22 |