TIL-2021.11.08


1.今日やるべきこと

  • アルゴリズム駐車s.A提出
  • 生活コードJava教室ヒアリング(~生成者)
  • プログラマー(アルゴリズム)2番、6番解答(時間1~10回あり)
  • 2.今日やったこと(+習ったこと)

  • アルゴリズム駐車S.Aを提出する
    https://velog.io/@kju190920/%ED%95%AD%ED%95%B499-2%EC%A3%BC%EC%B0%A8-S.A
  • 生活コードJavaコースを受講
    https://velog.io/@kju190920/Java%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9
  • プログラマ(アルゴリズム)
  • 2番:偶数と奇数


    問題の説明
    整数numが偶数の場合は「Even」、奇数の場合は「Odd」の関数を返します.解決策を完了してください.
    せいげんじょうけん
    numはint範囲の整数です.
    0は偶数です.
    Solution
    条件文
  • (偶数を2、奇数を1で割る)
  • 他者解答:3つの演算子
  • class Solution {
        public String solution(int num) {
            String result = "";
           
            // 2로 나눈 나머지 0이면 짝수, 아니면 홀수
            if (num % 2 == 0){
                result = "Even";
            }else{
                result = "Odd";
            }
            
            /* 다른 사람 풀이
            return num % 2 == 0 ? "Even": "Odd"; 
            */
            
            return result;
        }
    }

    6番:ない数字を追加


    問題の説明
    パラメータは、0から9までの数値の一部を含む配列番号です.numbersで見つからない0から9までのすべての数字は、solution関数を完了して1つの数を返します.
    せいげんじょうけん
    1≦numbersの長さ≦9
    0≦numbersのすべての数≦9
    numbersのすべての数字が異なります.
    Solution
  • 複文
  • length:タイル長
  • 其他人解答:各
  • class Solution {
        public int solution(int[] numbers) {
            
            int result = 45;   // 0 ~ 9 까지의 합
            
            // 전달 받은 길이 만큼 반복문을 돌려서 전달받은 값을 뻄
            // 9 라는 숫자만 전달 받으면 총합에서 9를 뺸 없는 숫자 더함 (45 - 9 = 36)
            for (int i = 0 ; i < numbers.length; i++ ){
                result -= numbers[i];
            }
            
            /* 다른 사람 풀이
            for (int i : numbers) {
                sum -= i;
            }
            */
                
            return result;
        }
    }

    1号:長方形で撮影


    問題の説明
    この問題には、標準入力として2つの整数nとmがあります.
    アスタリスク(*)を使用して、長さn、長さmの長方形を出力します.
    せいげんじょうけん
    nとmはそれぞれ1000以下の自然数である.
    Solution
  • 複文(横撮り、横撮り)
  • import java.util.Scanner;
    
    class Solution {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();
            int b = sc.nextInt();
            
            for (int i = 0 ; i < b ; i++){      // 세로 길이 만큼
                for(int j = 0; j < a; j++ ){    // 가로 길이 만큼
                   System.out.print('*'); 
                }    
                System.out.println();           // 개행
            }
    
        }
    }

    3番:中間文字を入力


    問題の説明
    単語sの中間文字を返す関数を作成します.単語の長さが偶数の場合は、中間の2文字を返します.
    せいげんじょうけん
    sは、1または100より長い文字列です.
    Solution
    条件文
  • サブストリング(開始位置、終了位置):文字列を切り取り、インデックスは0から
  • length():文字列長
  • class Solution {
        public String solution(String s) {
            String result = "";
            
            // 짝수면 가운데 두 글자, 홀수면 가운데 한 글자
            if(s.length() % 2 == 0){
                result = s.substring(s.length()/2 - 1, s.length()/2 + 1);
            }else{
                result = s.substring(s.length()/2, s.length()/2 + 1);
            }
            
            /* 다른 사람 풀이
            return s.substring((s.length()-1) / 2, s.length()/2 + 1); 
            }
            */
            
            return result;
        }
    }

    4:2つの整数の合計


    問題の説明
    2つの整数a,bが与えられると,aとbの間のすべての整数の和の関数を返し,解を完了する.
    例えば、a=3、b=5の場合、3+4+5=12であるため、12が返される.
    せいげんじょうけん
    aとbが同じ場合、どちらの場合も車に戻ることができます.
    aおよびbは、−1000000または1000000以下の整数である.
    aとbの大きさの関係は不確定である.
    Solution
    条件文
  • ,繰返し文
  • 回答者
  • Math.min:最小値
  • Math.最大値:
  • class Solution {
        public long solution(int a, int b) {
            long result = 0;
            
            int temp = 0;
            
            // 작은 수를 a 값에 오도록 서로 변경
            if (a > b){
                temp = a;
                a = b;
                b = temp;
            }
            
            for (int i = a; i <= b; i++){
                result += i;
            }
            
            return result;
        }
    }
    // 다른 사람 풀이
    class Solution {
    
        public long solution(int a, int b) {
            return sumAtoB(Math.min(a, b), Math.max(b, a));
        }
    
        private long sumAtoB(long a, long b) {
            return (b - a + 1) * (a + b) / 2;
        }
    }

    5:文字列を整数に置換


    問題の説明
    文字列sを数値に変換した結果の関数を返します.
    せいげんじょうけん
    sの長さは1または5以下である.
    sの一番前に記号(+,-)があるかもしれません.
    sは記号と数字のみからなる.
    sは「0」で始まりません.
    Solution
  • Integer.ParseInt(String s):文字列を数値整数
  • に変換
  • 回答者
  • 文字-"0"はアスキーコード"1"(81)-"0"(80)=1を表す
  • class Solution {
        public int solution(String s) {
            int result = 0;
            
            // 문자열을 숫자로 변경
            result = Integer.parseInt(s);
            
            return result;
        }
    }
    // 다른 사람 풀이
    public class StrToInt {
        public int getStrToInt(String str) {
                boolean Sign = true;
                int result = 0;
    
          for (int i = 0; i < str.length(); i++) {
                    char ch = str.charAt(i);
                    if (ch == '-')
                        Sign = false;
                    else if(ch !='+')
                        result = result * 10 + (ch - '0');
                }
                return Sign?1:-1 * result;
        }
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        public static void main(String args[]) {
            StrToInt strToInt = new StrToInt();
            System.out.println(strToInt.getStrToInt("-1234"));
        }
    }

    7号:陰陽加算


    問題の説明
    いくつかの整数があります.パラメータは、整数配列の絶対値(整数単位)と記号(整数単位)です.解関数を完了し、実際の整数の和を求めて返してください.
    せいげんじょうけん
    絶対値の長さは1または1000以下です.
    絶対数のすべての数字は1または1000以下です.
    記号の長さは絶対長に等しい.
    signs[i]が真で絶対[i]を表す実際の整数は正であり、そうでなければ負である.
    Solution
  • 複文、条件文
  • length:タイル長
  • 他者解答:3つの演算子
  • class Solution{
        public int solution(int[] absolute, boolean[] sign){
           int result = 0;
    
           for(int i = 0; i < absolute.length; i++){
              if(sign[i]){
                  result += absolute[i];    // 양수면 그냥 더함
              }else{
                  result -= absolute[i];    // 음수면 마이너스 붙여서 뺌
              }
           }
    
           return  result;
        }
    }
    // 다른 사람 풀이
    class Solution {
        public int solution(int[] absolutes, boolean[] signs) {
            int answer = 0;
            for (int i=0; i<signs.length; i++)
                answer += absolutes[i] * (signs[i]? 1: -1);
            return answer;
        }
    }

    8号:平均値を求める


    問題の説明
    整数を含む配列arrの平均値を返す関数を完了します.
    せいげんじょうけん
    arrは、長さが1以上100未満の配列である.
    arrの要素は10000未満または10000未満の整数です.
    Solution
  • 繰り返し文(全長で繰り返し加算、全長で除算)
  • インチ変換
  • 回答者
  • Stream
  • を使用
  • 平均値():平均
  • orElse():ポーリング値
  • を設定
    class Solution {
        public double solution(int[] arr) {
            double avg = 0;
            
            int sum = 0;
            
            for(int i = 0; i< arr.length; i++){
                sum += arr[i];
            }
            
            avg = ((double)sum / arr.length);
            
            return avg;
        }
    }
    import java.util.Arrays;
    
    public class GetMean {
        public int getMean(int[] array) {
            return (int) Arrays.stream(array).average().orElse(0);
        }
    
        public static void main(String[] args) {
            int x[] = {5, 4, 3};
            GetMean getMean = new GetMean();
            // 아래는 테스트로 출력해 보기 위한 코드입니다.
            System.out.println("평균값 : " + getMean.getMean(x));
        }
    }

    9番:携帯番号を止める


    問題の説明
    プログラマのモバイルデバイスは、個人情報を保護する通知を送信すると、お客様の電話番号の一部を遮断します.
    電話番号に文字列phone numberが付与されている場合、電話番号の後ろ4桁を除いて、他の数字がすべて*で上書きされている文字列は、関数に戻って解決策を完了してください.
    せいげんじょうけん
    sは、長さが4より大きく、20未満の文字列である.
    Solution
  • 複文、条件文(終了から4桁前*拍まで)
  • 文字(索引):
  • 回答者
  • からCharArray()へ:文字列をChar型配列
  • に変更する.
  • String.valueOf():
  • 任意の値をString文字列に変換
    class Solution{
    
        public String solution (String phone_number){
            String result = "";
    
            for(int i = 0; i < phone_number.length(); i++){
                // 끝에서 4자리 전까지 * 찍음, 나머지 그대로
                if(i < phone_number.length()-4){
                    result += '*';
                }else {
                    result += phone_number.charAt(i);   // 문자열 내 i번째 인덱스 문자를 가리킴
                }
            }
            return result;
        }
    }
    // 다른 사람 풀이
    class Solution {
        public String solution(String phone_number) {
            char[] ch = phone_number.toCharArray();
            for(int i = 0; i < ch.length - 4; i ++){
                ch[i] = '*';
            }
            return String.valueOf(ch);
        }
    }

    10番:行列の加算


    問題の説明
    行列の加算は、2つの同じ行列の同じ行、同じ列の値を加算した結果です.2つのマトリクスarr 1とarr 2を入力し、マトリクス加算結果の関数を返し、解を完了します.
    せいげんじょうけん
    行列arr 1、arr 2の行および列の長さは500を超えない.
    Solution
    /*
    2차원 배열은 인덱스 2개를 사용하여 값을 저장하고 출력
    중첩 반복문 사용
    */
    class Solution{
        
        public int[][] solution(int[][] arr1, int[][] arr2){
            int[][] result = new int[arr1.length][arr1[0].length];  // new int[][]{{1, 2}, {3, 4}};
    
            // 1. 반복문 이용해서 2차원 배열 값 저장
            for(int i =0; i < arr1.length; i++){
                for(int j = 0; j < arr1[i].length; j++){
                    result[i][j] = arr1[i][j] + arr2[i][j];
                }
            }
    
            return result;
        }
    }
    // 다른 사람 풀이
    lass SumMatrix {
        int[][] sumMatrix(int[][] A, int[][] B) {
        int row = Math.max(A.length, B.length);
        int col = Math.max(A[0].length, B[0].length);
            //int[][] answer = {{0, 0}, {0, 0}};
        int[][] answer = new int[row][col];
        for(int i=0; i<row ; i++){
          for(int j=0; j<col; j++){
            answer[i][j] = A[i][j] + B[i][j];
          }
        }
            return answer;
        }