3/12 정리

안대륜·2022년 3월 12일

알고리즘만 주구장창 푼날임에도 불구하고 아직도 알고리즘을 나혼자 잘못풀겠다 ... 답지보는 시간이 더 많았다.. 남들은 혼자서 쭉쭉 잘푸는거 같은데 나는 바보인가,, 얼른 성장하고 싶다 가끔씩 코딩한다고 괜히 깝쳤나 싶은 생각들이 살짝씩 드는데 떨쳐내고 우선은 현재에 충실히 집중하자 !!! 할수있다 93일만더 버텨내자 !!!

알고리즘

5. 문자열을 정수로 바꾸기


1번째 방법풀이

class Solution {
  public int solution(String s) {
  boolean Sign = true;
  		int result = 0;
    for (int i=0; i <s.length(); i++) {
    	char ch = s.charAt(i);
	   if char (ch == '-')  {
 	      Sign = false;
       } else if (ch != '+') {
       		result = result *10 + (ch - '0');
  //          
       }
    } return Sign? result : -1 *result; 
  }
  }

1 . 논리연산자를 Sign을 트루라고 해놓고 결과값을 담을 변수 리절트도 준비한다.
2 . s의 길이만큼 반복문을 실행
3 . 문자데이터 ch를 charAt로 s의 인덱스 값들을 가지고올수있게해준다
4. 만약 ch가 마이너스라면 논리연산자 Sign은 폴스가 된다.
5 . 또, 그밖에 ch가 +기호를 가지고있지않으면 리절트값에 10을 곱한후 , + (ch - '0') (유니코드값으로 연산해준다 - 1의 유니코드값은 49 , 0의 유니코드값은 48 )
숫자가 담긴 문자형끼리 뺄셈을 해주기 위해서
6 . 삼항연산자를 이용하여서 Sign이 참이면 result값을 가져오고 거짓이라면 result값에 -1를 곱한 즉, 마이너스 -1234를 출력한다.

2번째 방법풀이

class Solution {
  public int solution(String s) {
return Integer.parseInt(s);
	}
}
  1. 너무나 간단한 한줄코드이다 자바에서 String을 int로 바꿔주는 Intger.parseInt를 사용하면 된다.

6 없는 숫자 더하기

class Solution {
    public int solution(int[] numbers) {
		int num =45;  
        for (int number : numbers) {
        	num -= number;
        }
    } return num;
    }

1 . 0 ~9 까지의 없는숫자들을 찾아야하니까 일단 먼저 num 변수에 총합한값인 45를 넣어주고 없는 숫자들을 빼주기로 했다
2 . for -each 문을 이용하여서 더욱 간결하게 코드를 작성하였다.
3 . 0~9까지의 모두 더한값 45에서 numbers에서 돌린 반복문의 합을 빼면 어떠한 숫자가 빠져있는지를 알수있다.

만약 numbers에 [2,3,5,6,7,9] 를 입력해서 (1,4,8)이 빠져있었다고한다면 결과값은 45에서 13을뺀 32가 출력된다.


7. 음양 더하기

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
    int result = 0;
    for (int i=0; i <absolutes.length; i++) {
    	result += absolutes[i] * (signs[i]? 1 : -1);
    }
    } return result;
    }

해야할것은 입력된 absolutes의 정수배열을 합하는것이다 그런데 그중 sign이 true인 애들은 양수이고 false인애들은 음수이다

1 . absolutes의 길이만큼 반복문을 실행시켜준다
2 . 반복문으로 가지고온 absolutes의 인덱스 값들을 논리연산자 sign의 삼항 연산자를 통하여 양수인지 음수인지를 확인후 보내준다


8 평균구하기

class Solution {
    public double solution(int[] arr) {
    double result =0;
    for (int i=0; i <arr.length; i++) {
    	result += arr[i] / (double)arr.length;
    }
    return result;
    }
    }

보자마자 바로 간단하게 풀었던 문제이다 말그대로 정수의 합에서 평균을 구하면된다
1 . 결과값을 담을 변수를 생성해준다.
2 . 반복문으로 arr의 길이만큼 실행시켜준다.
3 . 박복문으로 나온 arr의 인덱스값들을 arr의 길이만큼 나누어 평군을 구해준다
( [1,2,3,4] 를 입력하였을때 평균값이 2.5가 나오므로 (double)로 강제 형변환을 해주지않으면 오류가난다)


9 핸드폰 번호 가리기

class Solution {
    public String solution(String phone_number) {
    String result =""
    int length = phone_number.length() -4 ;
    for (int i=0; i<length; i++) {
    result += '*'; 
    }
    result += phone_number.substring(length);
    return result;
    }
    }

length는 배열의 길이를 알려할때 사용한다

length()는 문자열의 길이를 알고자할때 사용한다.

전화번호 뒷자리4자리를 제외한것을 별표 처리를 하면된다
1 . 먼저 랭스라는 변수를 생성해주어서 폰넘버길이에서 뒤에서 4번째자리 까지 지정해주도록한다
2 . 생성해준 변수 랭스길이만큼 반복문을 실행하고 그실행된 값에는 별표시를 넣어준다
3. 결과값으로 폰넘버에 서브스트링(변수 length)로 인덱스를 나누어주도록하고 출력


10 행렬의 덧셈

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = {};
        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;
    }
}
  1. 생성자 (?맞나?) 를 이용해 answer를 세팅해준다
  2. 이중반복문을 통하여 행과열을 생성해준다
  3. answer인덱스값을 대입해준다
  4. 사실 잘모르겠음 다시 공부해야겠네 ㅠ

11 x만큼 간격이 있는 n개의 숫자

class Solution {
    public long[] solution(long x, int n) {
        long[] answer = new long[n];
        for (int i =0; i <n; i++) {
            answer[i] = x * (i+1);
        }
        return answer;
    }
}
  1. answer 라는 생성자(?맞는지모르겠음)선언해주고 초기화작업을해줌
  2. n개의 길이만큼 반복문으로 실행을하고 answer[i] - (n번을 해야하는 값을 지니고있음)의 결과값에 실행할 정수 x 에 i +1을 곱하여 x값이 2배씩 커질수있도록 해준다.

12 부족한 금액 계산하기

class Solution {
    public long solution(int price, int money, int count) {
        long answer =0;
        for (int i=0; i<=count; i++) {
            answer+= i  * price;
            }
            return answer > money ? answer-money : 0;
    }
}

1 . 먼저 결과값을 담을 answer를 생성해주고
2 . count(기구 이용횟수)만큼 반복하여준다
3 . 반복한 값 i 에 price(이용가격)를 곱하여서 총 내야할 비용을 answer에 할당해준다
4. 삼항 연산자를 통하여 만약 내야할 비용이 내가 가진금액보다 크면(참이면) 내야할 비용에서 가진비용 빼서 얼마가 더 필요한지 출력하고 거짓이면 0을 리턴해준다.


13 2016년 날짜 구하기

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int[] monthDate = {31,29,31,30,31,30,31,31,30,31,30,31};
        for (int i =1; i < a; i++) {
            b+= monthDate[i -1];
        }
        switch (b% 7) {
            case 1: answer = "FRI"; break;
            case 2: answer = "SAT"; break;
            case 3: answer = "SUN"; break;
            case 4: answer = "MON"; break;
            case 5: answer = "TUE"; break;
            case 6: answer = "WED"; break;
            case 0: answer = "THU"; break;
        }
            
        return answer;
    }
} // 윤년은 4년에 한번 돌아오는 2월의 날짜수가 29일인 해입니다. 월드컵처럼 4년만에 무조건 돌아오는 것이 아닌 특별한 규칙이 있다고합니다.
 // - 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.
 // - 4로 나누어 떨어지지만 100으로 나누어 떨어지는 해는 평년으로 한다.
 // - 단, 400으로 나누어 떨어지는 해는 윤년으로 한다
  • 입력값의 요일을 구하는 문제이다.
  • 월마다의 일수값을 배열로 선언해주고
  • 구하는값의 월의 길이만큼 반복문 실행을 통해 모든일수를 더하여서 7로나누었을때 각자 해당하는 요일을 출력해주도록 해보겠다.
  • 만약 a , b 에 5 , 24 가 입력된다면 4번반복실행을 하고 그값을 monthDay의 인덱스길이 값에다 -1을 해주어서 총 4월까지의 일수를 가진상태에서 b 에다가 넣어준다
  • 그러면 b의값은 1~4월까지의 일수와 b(24일) 값을 더한값이된다
  • 이제 b값에서 7(일주일)을 나눠줘서 2016년 1월1일이 금요일이니 7로 나누었을때 1이 나머지값이라면 금요일을 출력하고 브레이크문으로 빠져나온다
  • 2가 나머지 값이면 토요일 ,3이 나머지 값이면 일요일 , 4가 나머지 값이면 월요일 , 5가 나머지 값이면 화요일 , 2가 나머지 값이면 수요일 , 2가 나머지 값이면 목요일 이 나오게된다.

0개의 댓글