조건문과 반복문, 배열을 공부했다. 내일이면 본격적으로 알고리즘 테스트에 들어간다.
오늘은 조건문 반복문 문제 풀면서 헷갈린 것들을 정리하겠다.
String[] words = { "television", "computer", "mouse", "phone"}
for (int i = 0; i < words.length; i++) {
char[] question = words[i].toCharArray(); // String을 char[]로 변환
// char배열 question의 글자 순서를 섞는다.
for (int j= 0; j<question.length; j++){
int k = (int) (Math.random() * question.length);
char tmp = '0';
tmp = question[0];
question[0] = question[k];
question[k] = tmp;
}
System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(question));
순서섞기에 변수가 은근히 헷갈린다. 따로 정리하지 않으면 다시 만날때 또 헷갈릴 것 같다.
일단 순서 섞을 때 필요한 랜덤 정수
: int k = (int) (Math.random() * 배열.length);
임시 변수 tmp를 세워놓고
결과적으로 첫값과 랜덤인덱스값이 바뀐다.
이걸 배열 길이만큼 반복문으로 묶어주면 배열이 뒤죽박죽으로 섞인다!!
1) String 문자열을 char 배열로 저장
한 다음 섞고 다시2. char 문자열을 String문자열
로 돌리는 과정이다.1) char[] 문자배열변수명 = 문자열변수.toCharArray();
2) String 새로운문자열변수명 = new String(문자배열변수명);
//4-4. 1+(-2)+3+(-4)+...과 같은 식으로 계속 더해나갔을 때,
//몇까지 더해야 총합이 100 이상이 되는지 구하세요.
class Exercise4_4 {
public static void main(String[] args) {
int sum = 0; // 총합을 저장할 변수
int s = 1; // 값의 부호를 바꿔주는데 사용할 변수
int num = 0;
/*빈 칸*/
System.out.println("num="+num);
System.out.println("sum="+sum);
}
}
int sum = 0; // 총합을 저장할 변수
int s = 1; // 값의 부호를 바꿔주는데 사용할 변수
int num = 0;
while (sum<100) {
num = Math.abs(num) + 1;
num = num * s;
s = -s;
sum += num;
}
System.out.println(num);
System.out.println(sum);
while문을 써서 반복문이 돌 때 마다 num을 절대값에 1추가되는 값을 계속 넣고
s = -s로 음수를 지정해주고 sum += num으로 sum값 세팅하니
num = 199, sum 100으로 해결!
int num = 12345;
int sum = 0;
/*
(1) 알맞은 코드를 넣어 완성하시오.
*/
System.out.println("sum="+sum); // 결과 : sum=15
int num = 12345;
int sum = 0;
int i = 0;
while (Math.pow(10,i) < num){
++i;
int n = (int) (num % Math.pow(10,i));
int m = (int) (num % Math.pow(10,i-1));
int k = (n - m)/ (int)Math.pow(10,i-1);
sum += k;
java에서 제곱을 표현할때 쓰는 함수인 Math.pow(밑,지수)를 써서
10의 제곱으로 나눈 나머지 값을 계속 더해가며 풀었는데
이것도 정답은 맞지만
다른 답을보니 충격적으로 깔끔해서 메모해 둔다.
* 해결
```java
while(num > 0) {
sum += num%10;
num /= 10;
}
접근법은 나랑 비슷하지만 3줄만에 완전 깔끔하게 풀었다.
num%10을 쓰고, num자체를 num /= 10으로 다시 배정해서
소수점 아래는 어차피 버려지니 이렇게 푸는 방법이었다.
자바에서 제곱을 표현하려면 Math.pow(밑, 지수)
10의 5승은 Math.pow(10,5)
String, 문자열은 맞는지 여부 판단할 때 ==대신 .equals("")!!