https://school.programmers.co.kr/learn/courses/30/lessons/12969
난이도 : 쉬움
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String star = "*";
for (int i = 0; i < b; i++) {
for (int j = 0; j < a; j++) {
System.out.print(star);
}
System.out.println();
https://school.programmers.co.kr/learn/courses/30/lessons/12937
난이도 : 쉬움
문제 코드 이해하기
public String solution(int num)
이것을 보니 매개변수를 숫자로 받아 함수 안에서 짝홀 구분을 하여 Odd/Even 문자열을 반환하는것 같은데, java의 함수 다루는 법을 알아봐야겠다.
출력까지 해야하는줄알았는데, 함수만 완성하면 되는거였다.
class Solution {
public String solution(int num) {
String answer = "";
if (num % 2 == 0) {
answer = "Even";
} else {
answer = "Odd";
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12903
난이도 : 어려움
String str = "asdfㅁㄴㅇㄴㅁㅇ";
if (str.length() > 2) {
if (str.length() % 2 == 0) {
System.out.println(str.substring(str.length()-3,str.length()-1));
System.out.println("짝수");
} else {
System.out.println("홀수");
System.out.println(str.substring(str.length() - 2, str.length() - 1));
}
} else {
System.out.println(str);
}
그래서 위의 코드처럼 했는데, 문제는 길이가 4,3일때만 작동한다. 특정 수를 빼는게 아니라 문자의 길이를 이용해서 다른 길이의 문자마다 다른 숫자가 연산되게 해야한다고 생각했다.
String str = "12345";
if (str.length() % 2 == 0) {
System.out.println(str.substring(str.length() - (str.length() / 2 + 1), str.length() - (str.length() / 2 - 1)));
System.out.println("짝수");
} else {
System.out.println("홀수");
System.out.println(str.substring(str.length() - (str.length() / 2 + 1), str.length() - (str.length() / 2)));
}
class Solution {
public String solution(String s) {
String answer = "";
if (s.length() % 2 == 0) {
answer = s.substring(s.length() - (s.length() / 2 + 1), s.length() - (s.length() / 2 - 1));
} else {
answer = s.substring(s.length() - (s.length() / 2 + 1), s.length() - (s.length() / 2));
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12912
난이도 : 보통
class Solution {
public long solution(int a, int b) {
long answer = 0;
int sum = a - 1;
for (int i = sum; i < b; i++) {
int c = sum += 1;
System.out.println(c);
answer += c;
}
return answer;
}
}
class SumTotal {
public long solution(int a, int b) {
int answer = 0;
int sum1 = a - 1;
int sum2 = b - 1;
if (a > b) {
for (int i = sum2; i < a; i++) {
int c = sum2 += 1;
answer += c;
}
} else if (b > a) {
for (int i = sum1; i < b; i++) {
int c = sum1 += 1;
answer += c;
}
} else {
answer = a;
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12925
난이도 : 쉬움-보통
class Solution {
public int solution(String s) {
int answer = 0;
answer = Integer.parseInt(s);
return answer;
}
}
그럼 답안이 이렇게 된다.
아래는 3번까지(-, + 떼고 출력하기) 풀었던것
class Solution {
public int solution(String s) {
int answer = 0;
answer = Integer.parseInt(s);
if (s.contains("-") || s.contains("+")) {
answer = Integer.parseInt(s);
} else {
answer = Integer.parseInt(s);
}
return answer;
}
}
다른사람들의 해설을 보니까 함수를 쓰지 않고 알고리즘으로 풀이하는 방법이 있는듯하다.
https://school.programmers.co.kr/learn/courses/30/lessons/86051
난이도 : 중간
for (int i = 0; i < arr.length; i++) {
System.out.println(i);
if (i != arr[i]) {
}
}
이라고 생각했는데, arr의 i번이 다른 자리에 있다면 일치하지 않는 취급을 하기 때문에 안된다.
그럼 for문이 한 번 돌 동안 arr[i]에 있는 모든 수를 한번씩 돌면서 꺼내서 비교해야하지 않을까?
class Solution {
public int solution(int[] numbers) {
int answer = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < numbers.length; j++) {
if ( i == numbers[j]) {
answer += numbers[j];
}
}
}
answer = 45 - answer;
return answer;
}
}
// 두번째 방법
배열의 숫자를 다 더하고 1-9까지 더한값에서 뺌
class Solution {
public int solution(int[] numbers) {
int answer = 0;
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
answer = 45 - (sum += numbers[i]);
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/76501
난이도 : 쉬움
문제를 처음 보고...
이게 무슨 소리인거지
이런 생각을 했다
절댓값을 찾아보니 0에서 그 수까지의 거리라고한다. -4도 될수있고, 4도 될수있고 그런 식이다.
그리고 보니까 입력값이 정해져있다. 이 입력값들을 함수 안에서 양수이면 더하고, 음수이면 빼라는 뜻인것같다.
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
int answer = 0;
for (int i = 0; i < absolutes.length; i++) {
if (signs[i] == true) {
answer += absolutes[i];
} else {
answer -= absolutes[i];
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12944
난이도 : 쉬움
class Solution {
public double solution(int[] arr) {
double answer = 0;
for(int i = 0; i < arr.length; i++) {
answer += arr[i];
}
answer /= arr.length;
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12948
난이도 : 쉬움-중간
class Solution {
public String solution(String phone_number) {
String answer = "";
String phoneNum = phone_number.substring(phone_number.length() - 4, phone_number.length());
for (int i = 0; i < phone_number.length() - 4; i++) {
answer += "*";
}
answer += phoneNum;
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12950
난이도 : 어려움
int[][] arr1 = new int[][]{{1,2},{2,3}};
System.out.println(arr1[0][1]); // 출력결과 : 2
// 꺼낼때 : for안에 for넣기
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1.length; j++) {
System.out.println(arr1[i][j]);
}
}
// 꺼낼때 : for안에 for넣기
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1.length; j++) {
System.out.println(i + "arr1의" + j + "번째:" + arr1[i][j] + "//arr2의" + j + "번째 :" + arr2[i][j]);
}
}
오류 : answer배열을 아래처럼 선언, 초기화시키려했는데, 값이 안들어가있으면 오류가 나는 모양이다.
int[][] answer = new int[][]{};
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
answer[i][j] = arr1[i][j] + arr2[i][j];
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12954
난이도 : 중간
int x = 2;
int n = 5;
int sum = 0;
for (int j = 0; j < n; j++) {
// System.out.println(j);
for (int i = 0; i <= n; i += x) {
if (sum <= n*x) {
System.out.println(sum += x);
}
}
}
이런걸 생각해보다가..
3. 잘 생각해보니 그냥 n까지 for을 돌린 뒤에 그만큼 x에 x를 더해주면 되는것이었다
class Solution {
public long[] solution(int x, int n) {
long[] answer = {};
int sum = 0;
for (int i = 0; i < n; i++) {
int temp = sum += x;
answer[i] = temp;
System.out.println(temp);
}
return answer;
}
}
이게 맞는거같은데, 오류가 난다.
answer한테 무슨 문제가있는것같다. 위에서도 비슷한 문제를 겪었던 것이 생각나서, 초기화 시 배열의 길이를 지정해주는걸로 해결해봤다.
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
int sum = 0;
for (int i = 0; i < n; i++) {
answer[i] = sum += x;
}
return answer;
}
}
처음으로 채점에서 실패가 떴다. 도무지 모르겠어서 찾아보니 sum의 타입 문제였다.
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
long sum = 0;
for (int i = 0; i < n; i++) {
answer[i] = sum += x;
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/82612
다른분들의 코드로 클래스 함수를 실행시키는 법을 알게되었다
class quiz12 {
public long quiz12(int price, int money, int count) {
long answer = -1;
return answer;
}
public static void main(String[] args){
quiz12 q12 = new quiz12();
System.out.println(q12.quiz12(3,20,4));
}
}
class quiz12 {
public long quiz12(int price, int money, int count) {
long answer = 0;
int num = 0;
for (int i = 1; i <= count; i++) {
answer += price * (num+i);
}
if (money < answer) {
answer = answer - money;
} else {
answer = 0;
}
return answer;
}
public static void main(String[] args){
quiz12 q12 = new quiz12();
System.out.println(q12.quiz12(3,20,4));
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12901
String[] Day = new String[]{"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
String whatDay = "";
int a = 1;
int b = 31;
if (whatDay == Day[0]) {
System.out.println(Day[0]);
}
int num = 7;
if (a == 1 || a == 3 || a == 5 || a == 7 || a == 8 || a == 10 || a == 12) {
num = 7 - b;
System.out.println(num);
if (num == 6) {
System.out.println(Day[5]);
} else if (num == 5) {
System.out.println(Day[6]);
} else if (num == 4) {
System.out.println(Day[0]);
} else if (num == 3) {
System.out.println(Day[2]);
} else if (num == 2) {
System.out.println(Day[1]);
} else if (num == 1) {
System.out.println(Day[2]);
} else if (num == 0) {
System.out.println(Day[3]);
}
} else if (a == 4 || a == 6 || a == 9 || a == 11) {
} else {
// 2월 (29일)일 때
}
if (b == 1) {
}
7에서 b를 빼보려고 했는데.. 그러면 b가 7이 넘을때면 -값이 되어버린다.
https://school.programmers.co.kr/learn/courses/30/lessons/12910
int[] arr = new int[] {5,9,7,10};
int divisor = 5;
int[] answer = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
if(arr[i]%divisor == 0) {
System.out.println("나누어떨어집니다");
answer[i] = arr[i];
} else {
System.out.println("나누어떨어지지 않습니다");
}
}
System.out.println(Arrays.toString(answer));
자꾸 [5,10] 처럼 나오지않고 [5,0,0,10]으로 나와서 이유를 헤맸는데, i번째를 돌면서 데이터를 넣어주다 보니까 나누어떨어지지 않더라도 i번째 자리를 채워버리게된다.
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public ArrayList<Integer> solution(int[] arr, int divisor) {
ArrayList<Integer> arr2 = new ArrayList<>();
ArrayList<Integer> result = new ArrayList<>();
int count = 0;
for (int i = 0; i < arr.length; i++) {
arr2.add(arr[i]);
}
for (int i =0; i < arr2.size(); i++) {
if ( arr2.get(i)%divisor == 0) {
result.add(arr2.get(i));
} else {
count ++;
}
}
if (count == arr2.size()) {
result.add(-1);
}
Collections.sort(result);
System.out.println(result);
return result;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/70128
난이도 : 쉬움
class Solution {
public int solution(int[] a, int[] b) {
int result = 0;
for (int i = 0; i < a.length; i++) {
result += a[i]*b[i];
}
return result;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12916
난이도 : 쉬움-중간
System.out.println("aaa".substring(0,1));
System.out.println("abc".substring(1,2));
System.out.println("abc".substring(2,3));
// 즉, s.substring(i,i+1);
import java.util.ArrayList;
class Solution {
boolean solution(String s) {
boolean answer = true;
ArrayList<String> stringArr = new ArrayList<>();
int pNum = 0;
int yNum = 0;
for (int i = 0; i < s.length(); i++) {
stringArr.add(s.substring(i,i+1));
if (stringArr.get(i).contains("p") || stringArr.get(i).contains("P")) {
pNum++;
} else if (stringArr.get(i).contains("y") || stringArr.get(i).contains("Y")) {
yNum++;
}
}
if (pNum == yNum) {
answer = true;
}else {
answer = false;
}
System.out.println(answer);
return answer;
}
}
다른사람의 코드를 보니, pNum과 yNum의 크기가 같으면 +-로 0이 되니 count 변수 하나만 사용하고 count==0일때로 구분하는 것도 좋은 방법인것같다.
https://school.programmers.co.kr/learn/courses/30/lessons/12918
난이도 : 중간
boolean answer = false;
ArrayList<String> stringArr = new ArrayList<>();
int numNum = 0;
for (int i = 0; i < s.length(); i++) {
stringArr.add(s.substring(i,i+1));
// System.out.println(stringArr);
for (int j = 0; j <= 9; j++) {
System.out.println("j는 : " + Integer.toString(j));
System.out.println("str는 : " + stringArr.get(i));
if (Integer.toString(j) == stringArr.get(i)) {
System.out.println("숫자입니다.");
numNum ++;
}
}
}
System.out.println("숫자의 개수: "+numNum);
if(numNum == s.length()) {
answer =true;
}
return answer;
이중포문으로 0~9과 문자열을 비교했는데 0~9를 문자열로 형변환시켜줄 필요가 있었다.
그리고 문자열로 바꾼 j와 stringArr(i)가 일치하지 않는 판정이 난다..
그럼 0~9를 아예 배열로 만들어서 하나씩 꺼내보면 어떨까
import java.util.ArrayList;
class Solution {
public boolean solution(String s) {
boolean answer = false;
String[] numArr = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
ArrayList<String> stringArr = new ArrayList<>();
int numNum = 0;
for (int i = 0; i < s.length(); i++) {
stringArr.add(s.substring(i, i + 1));
System.out.println(stringArr);
for (int j = 0; j < numArr.length; j++) {
if (numArr[j].equals(stringArr.get(i))) {
numNum++;
}
}
}
if (numNum == s.length()) {
answer = true;
}
return answer;
}
}
근데 채점 결과 몇몇개가 실패가 떴다.
오잉...? 어딜 봐도 기능은 잘 작동해서 질문하기 창을 보니 길이가 4/6이 아닐 때의 처리를 해줘야한다고 한다. -> if문으로 글자 길이가 4 또는 6일때만 동작하게 했다.
import java.util.ArrayList;
class Solution {
public boolean solution(String s) {
boolean answer = false;
ArrayList<String> stringArr = new ArrayList<>();
int numNum = 0;
if (s.length() == 4 || s.length() == 6) {
for (int i = 0; i < s.length(); i++) {
stringArr.add(s.substring(i, i + 1));
for (int j = 0; j <= 9; j++) {
if (Integer.toString(j).equals(stringArr.get(i))) {
numNum++;
}
}
}
if (numNum == s.length()) {
answer = true;
}
System.out.println(answer);
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12919
난이도 : 쉬움
class Solution {
public String solution(String[] seoul) {
String answer = "";
for (int i = 0; i < seoul.length; i++) {
System.out.println(seoul[i]);
if (seoul[i].equals("Kim")) {
answer = "김서방은 " + i + "에 있다";
}
}
return answer;
}
}
if문에서 Kim을 찾았을 때 break;하는것이 좋다.
https://school.programmers.co.kr/learn/courses/30/lessons/12922
class Solution {
public String solution(int n) {
String answer = "";
for (int i = 0; i < n; i++) {
if(i % 2 == 0) {
answer += "수";
} else {
answer += "박";
}
}
return answer;
}
}
다른사람의 풀이를 보니까 이런게 있어서 진짜 웃겼다ㅜㅜㅜㅜ
https://school.programmers.co.kr/learn/courses/30/lessons/42576
participant의 값 arrayList에 넣기 / completion의 값 arrayList에 넣기
두개를 비교하여 같은 값 찾기
같은 값 지우기
두 개의 값이 다른것을 하나 찾아 지워주면 간단한데, 두 개의 값이 같은것을 찾는 건 쉬운데 다른것을 찾으려면 for문에서 너무 많은 데이터가 찾아져서 어렵다..
두개의 값이 같다면 num을 뽑아 arrayList에 저장하고,
.add(), .remove()를 사용하여 numArr에 있는 숫자를 인덱스로 participantArr에서 지우려고했는데 잘 안 된다.
https://school.programmers.co.kr/learn/courses/30/lessons/12930
난이도 : 중간-어려움
for (int i = 0; i < 쪼갤 문자열.length(); i++) {
쪼갠것을 넣을 arraylist.add(쪼갤 문자열.substring(i, i + 1));
}
이라고 생각했는데, .split()이라는 걸 알게되었다.
""을 기준으로 잘라주면 글자가 하나하나씩 잘리게된다.
String[] strArr = 쪼갤 문자열.split("");
import java.util.ArrayList;
class Solution {
public String solution(String s) {
String answer = "";
ArrayList<String> strArr = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
strArr.add(s.substring(i, i+1));
if ( i % 2 == 0 || i == 0) {
// System.out.println(strArr.get(i) + "는 짝수번째");
answer += strArr.get(i).toUpperCase();
} else {
// System.out.println(strArr.get(i) + "는 홀수번째");
answer += strArr.get(i).toLowerCase();
}
}
System.out.println(answer);
return answer;
}
}
자신 있게 제출했는데 정확성이 18.8이다..
문제를 다시 보니, 전체 문장 "hello world"에서 단어 별로 인덱스를 세야한다고 한다. (즉 "hello"와 "world"의 인덱스를 따로 세야한다.)
그렇다면 공백일 때 단어를 잘라주는 무언가가 필요할것같다.
찾아보니 .split()을 사용하면 될 것 같다.
String answer = "";
String[] strArr = s.split("");
for (int i = 0; i < s.length(); i++) {
if (i % 2 == 0) {
answer += strArr[i].toUpperCase();
} else {
answer += strArr[i].toLowerCase();
}
}
System.out.println(answer);
그런데 이러면 공백이 있을 때의 대처를 할 수 없다.
카운트를 받는 변수를 하나 만들고 공백일 때는 count=0 처리를 해주기로 했다.
import java.util.ArrayList;
class Solution {
public String solution(String s) {
String answer = "";
int count = 0;
String[] strArr = s.split("");
for (int i = 0; i < s.length(); i++) {
if (strArr[i].equals(" ")) {
answer += strArr[i];
count = 0;
} else if (count % 2 == 0 || count == 0) {
answer += strArr[i].toUpperCase();
count++;
} else {
answer += strArr[i].toLowerCase();
count++;
}
}
System.out.println(answer);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12931
난이도 : 쉬움
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String numStr = Integer.toString(n);
ArrayList<String> stringArr = new ArrayList<>();
ArrayList<Integer> numArr = new ArrayList<>();
for (int i = 0; i < numStr.length(); i++) {
stringArr.add(numStr.substring(i, i + 1));
numArr.add(Integer.parseInt(stringArr.get(i)));
answer += numArr.get(i);
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12932
중간 - 어려움
import java.util.ArrayList;
class Solution {
public ArrayList<Integer> solution(long n) {
ArrayList<Integer> result = new ArrayList<>();
String numStr = String.valueOf(n);
String[] strArr = numStr.split("");
for (int j = strArr.length-1; j >= 0; j--) {
result.add(Integer.parseInt(strArr[j]));
}
return result;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12933
import java.util.Arrays;
import java.util.Collections;
class Solution {
public long solution(long n) {
long answer = 0;
String temp = "";
String[] strArr = String.valueOf(n).split("");
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);
}
Arrays.sort(strArr, Collections.reverseOrder());
System.out.println(strArr[0]);
for (int i = 0; i < strArr.length; i++) {
temp += strArr[i];
}
answer = Long.parseLong(temp);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12934
난이도 : 중간
class Solution {
public long solution(long n) {
long answer = 0;
double square = Math.sqrt(n);
if(square * square == n) {
answer = (int)(square+1) * (int)(square+1);
} else {
answer = -1;
}
System.out.println(answer);
return answer;
}
}
채점 결과 정확성 44.4......
아마 그냥 int로 바꿔주고 long타입이 아니어서 그런듯하다
이렇게 되면 double -> int -> long 이렇게 두번 바꿔치기 해주면 어떨까
double square = Math.sqrt(n);
int intSquare = (int)Math.sqrt(n);
long longSquare = (long) (int) Math.sqrt(n);
삼단 변신 후
채점도 무사히 통과했다!!
class Solution {
public long solution(long n) {
long answer = 0;
long longSquare = (long) (int) Math.sqrt(n);
if(longSquare * longSquare == n) {
answer = (longSquare+1) * (longSquare+1);
} else {
answer = -1;
}
System.out.println(answer);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12935
난이도 : 어려움
class Solution {
public ArrayList<Integer> solution(int[] arr) {
ArrayList<Integer> intArr = new ArrayList<>();
// 받은 배열에서 하나씩 꺼내서 arraylist에 넣기
for (int i = 0; i < arr.length; i++) {
intArr.add(arr[i]);
}
// 오름차순 정렬
Collections.sort(intArr);
// 0번째 인덱스 값 삭제하기
intArr.remove(0);
if (intArr.size() == 0) {
intArr.add(-1);
}
return intArr;
}
}
그런데 . . 문제가 있다.
아예 오름차순 정렬을 하는게 아니라 원래의 배열 순서를 유지하면서 가장 작은 수를 지우는거였다.
그렇다면..
배열을 다 돌면서 두개의 숫자를 비교하고 나중에 가장 작은 수를 지우면?
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public ArrayList<Integer> solution(int[] arr) {
ArrayList<Integer> intArr = new ArrayList<>();
ArrayList<Integer> answer = new ArrayList<>();
int smallNum = 0;
// 받은 배열에서 하나씩 꺼내서 arraylist에 넣기
for (int i = 0; i < arr.length; i++) {
intArr.add(arr[i]);
}
for (int i = 0; i < intArr.size(); i++) {
for (int j = 0; j < intArr.size(); j++) {
if(intArr.get(i) > intArr.get(j)) {
smallNum = j;
}
}
}
intArr.remove(smallNum);
if (intArr.size() == 0) {
intArr.add(-1);
}
return intArr;
}
}
..? ㅋㅋㅋ 정확성이 6.3이다..
println으로 다양한 값을 넣어보며 실험해봤더니,
{-1,5,10,6}처럼 -값이 들어가있는 경우엔 -값을 지우지 않고 5를 지운다..
작은 수를 판별할 수 있는 방법은?
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public ArrayList<Integer> solution(int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
if (arr.length == 1) {
answer.add(-1);
System.out.println(answer);
} else {
ArrayList<Integer> temp = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
temp.add(arr[i]);
}
Collections.sort(temp);
int smallNum = temp.get(0);
for (int i = 0; i < arr.length; i++) {
if(arr[i] != smallNum) {
answer.add(arr[i]);
}
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12943
난이도 : 중간
while (count <= 500) {
if (num % 2 == 0) {
System.out.println("짝수");
num = num / 2;
System.out.println(num);
count++;
// break;
} else if (num % 2 == 1) {
num = num * 3 + 1;
System.out.println("홀수");
System.out.println(num);
count++;
}
if (num == 1) {
System.out.println(count);
break;
}
if (count > 500) {
answer = -1;
break;
}
}
if (count > 500) {
answer = -1;
}
문제 : 작업을 500번 반복했을 때 -1을 반환하는 로직이 어렵다.
=> for문으로 500될때까지 실행으로 바꿈
class Solution {
public int solution(int num) {
int count = 0;
for (int i = 0; i < 500; i++) {
if (num % 2 == 0) {
num = num / 2;
count++;
} else if (num % 2 == 1) {
num = num * 3 + 1;
count++;
} else {
count++;
}
if (num == 1) {
// System.out.println(count);
break;
}
}
if (count == 500) {
count = -1;
}
System.out.println(count);
return count;
}
}
제출해봤더니 13번 테스트가 실패했다.
해결 : num이 1일때 0을 반환하는 코드 추가
class Solution {
public int solution(int num) {
int count = 0;
for (int i = 0; i < 500; i++) {
if (num == 1) {
count = 0;
} else if (num % 2 == 0) {
num = num / 2;
count++;
} else if (num % 2 == 1) {
num = num * 3 + 1;
count++;
} else {
count++;
}
if (num == 1) {
// System.out.println(count);
break;
}
}
if (count == 500) {
count = -1;
}
System.out.println(count);
return count;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12947
난이도 : 쉬움
import java.util.ArrayList;
class Solution {
public boolean solution(int x) {
boolean answer = true;
// 1. 숫자 문자열로 변환
String numStr = Integer.toString(x);
ArrayList<String> stringArr = new ArrayList<>();
ArrayList<Integer> numArr = new ArrayList<>();
int temp = 0;
for (int i = 0; i < numStr.length(); i++) {
// 2. 하나씩 쪼개기
stringArr.add(numStr.substring(i, i + 1));
// 3. 문자 숫자열로 변환해 배열에 하나씩 집어넣기
numArr.add(Integer.parseInt(stringArr.get(i)));
// 4. 자릿수 모두 더하기
temp += numArr.get(i);
}
// 5. 더한 수가 x와 나누어 떨어지는지 확인
if (x % temp != 0) {
answer = false;
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/68935
n진법 -> 10진법
Integer.parseInt(i, N);
class Solution {
public int solution(int n) {
String answer = "";
while(n >= 3) {
answer += n % 3;
n /= 3;
}
answer += n;
int result = Integer.parseInt(answer, 3);
System.out.println(result);
return result;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12906
난이도 : 중간-어려움
public int[] solution(int []arr) {
int[] answer = {};
ArrayList<Integer> numArr = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
numArr.add(arr[i]);
}
for (int i = 0; i < numArr.size(); i++) {
if(numArr.get(i) == numArr.get(i+1)) {
numArr.remove(i+1);
}
}
System.out.println(numArr);
return answer;
}
처음엔 이렇게 했는데, 연속인 숫자가 3이상이어도 1개만 지운다는 문제가 있었다.
원래는 둘을 비교하여 같은값이 있으면 찾아냈는데, 다른값일 때만 배열에 저장하는 방법을 사용하면 어떨까?
import java.util.*;
public class Solution {
public ArrayList<Integer> solution(int[] arr) {
// 답안 값이 들어갈 배열
ArrayList<Integer> answer = new ArrayList<>();
// int []arr을 옮겨놓을 배열
ArrayList<Integer> numArr = new ArrayList<>();
// numArr에 arr의 값 하나씩 넣기
for (int i = 0; i < arr.length; i++) {
numArr.add(arr[i]);
}
// 비교할 숫자 준비. 인덱스0번째와 비교 숫자는 항상 달라야하기 때문에,
// 제한사항에 없는 숫자로 준비함
int compareNum = -1;
// numArr에서 하나씩 돌면서 compareNum과 같은지 확인
// 같지 않은 값만 답안 배열에 집어넣음
for (int i = 0; i < numArr.size(); i++) {
System.out.println("compareNum은 : " + compareNum);
System.out.println("비교할 숫자는 : " + numArr.get(i));
if (numArr.get(i) != compareNum) {
System.out.println("같지 않습니다");
compareNum = numArr.get(i);
answer.add(numArr.get(i));
}
System.out.println("--------------------");
}
System.out.println(answer);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/68644
난이도 : 중간
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public ArrayList<Integer> solution(int[] numbers) {
ArrayList<Integer> answer = new ArrayList<>();
ArrayList<Integer> numArr = new ArrayList<>();
// 이중for문으로 두 값을 더해줌 -> 배열에 넣기
for (int i = 0; i < numbers.length; i++) {
for (int j = i+1; j < numbers.length; j++) {
numArr.add(numbers[i]+numbers[j]);
}
}
// 오름차순 정리
Collections.sort(numArr);
int compareNum = -1;
// numArr에서 하나씩 돌면서 compareNum과 같은지 확인
// 같지 않은 값만 답안 배열에 집어넣음
for (int i = 0; i < numArr.size(); i++) {
if (numArr.get(i) != compareNum) {
compareNum = numArr.get(i);
answer.add(numArr.get(i));
}
}
System.out.println(answer);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/77484
import java.util.ArrayList;
class Solution {
public ArrayList<Integer> solution(int[] lottos, int[] win_nums) {
ArrayList<Integer> answer = new ArrayList<>();
// 일치 수를 담을 변수
int count = 0;
int zeroCount = 0;
int minPrice = 0;
int maxPrice = 0;
// 일치 여부 확인
for (int i = 0; i < lottos.length; i++) {
if (lottos[i] == 0) {
zeroCount++;
System.out.println("0의 수는 : " + zeroCount);
}
for (int j = 0; j < win_nums.length; j++) {
if (lottos[i] == win_nums[j]) {
System.out.println("일치합니다. 번호는 : " + lottos[i]);
count++;
}
}
}
minPrice = count;
maxPrice = zeroCount + count;
// 최고 순위
if (maxPrice == 2) {
answer.add(5);
} else if (maxPrice == 3) {
answer.add(4);
} else if (maxPrice == 4) {
answer.add(3);
} else if (maxPrice == 5) {
answer.add(2);
} else if (maxPrice == 6) {
answer.add(1);
} else {
answer.add(6);
}
// 최저 순위
if (minPrice == 2) {
answer.add(5);
} else if (minPrice == 3) {
answer.add(4);
} else if (minPrice == 4) {
answer.add(3);
} else if (minPrice == 5) {
answer.add(2);
} else if (minPrice == 6) {
answer.add(1);
} else {
answer.add(6);
}
System.out.println(answer);
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42840
https://school.programmers.co.kr/learn/courses/30/lessons/12915
https://school.programmers.co.kr/learn/courses/30/lessons/12917