Back-end/JAVA,Spring

자바 연습) 유용한 연습문제 소스코드.

cheersHena 2018. 6. 6. 00:14
반응형

public class Overall {
    /* 
문제 1. 문자열 뒤집기.

        입력되는 문자열을 뒤집어 출력하라.
     */
    public String printInversion(String str) {
        String result = "";
        for(int i=str.length()-1; i>=0; i--) {//반복문 뒤에서부터 0까지
            char tempCh = str.charAt(i); // charAt으로 문자열 읽기.
            result = result + tempCh;   //읽어들이며 result에 차례로 저장.
        }
        return result;
    }

    /*
문제 2. 문자열 개수 세기.

       입력 문자열에서 알파벳, 숫자, 공백의 개수를 구하시오.
     */
    public int[] countSth(String str) {
        int alpha=0, num=0, space=0;
        
        for(int i=0; i<str.length(); i++) {
            char tempCh = str.charAt(i); //문자열 읽기
            if (tempCh == ' ') { //*char 문자열은 한자리 = 홑따옴표.
                space ++;//공백이면 스페이스 카운트
            }else if (tempCh >= '0' && tempCh <= '9') {
                num ++; //숫자 카운트
            }else if (tempCh >= 'A' && tempCh <= 'Z' || tempCh >= 'a' && tempCh <= 'z') {
                alpha ++;//문자 카운트
            }
        }
        
        return new int[] {alpha, num, space};
    }

    /*
문제 3.회문 확인

        입력된 문자열이 회문(거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말)인지 확인하시오.
     */
    public boolean checkPalindrome(String original) {
        String reverse = "";
        String tempOriginal="";
        String[] tempArr;
        //input 공백 제거.
        tempArr = original.split(" "); //split: 주어진 문자열 기준으로 잘라서 배열에 저장.
        for(int i=0; i<tempArr.length;i++) { // 공백기준으로 잘랐으므로 공백 제거된문자들이 배열에 저장됨.
            tempOriginal = tempOriginal + tempArr[i]; //빈방에 배열값 저장. 즉, 공백이제어된 문자열만 저장됨.
        }
        //공백 제거 및 소문자 변경 후 다시 오리지널로 대입.
        original=tempOriginal.toLowerCase(); //모두 소문자로 변경후가공된 데이터를 오리지널로 대입.
        //문자열 뒤집기.
        for(int i=original.length()-1;i>=0;i--) {//반복문 뒤에서부터 돌려서
            char tempCh = original.charAt(i); // 차례로 저장하면 뒤집힌값들 저장.
            reverse = reverse + tempCh; //reverse로 대입.
        }
        //두 문자열 같으면 (equals) ture,다르면 false
        return original.equals(reverse); // 두값이 일치한다면, 회문이므로 true반환.
    }

    /*
문제 4. 0-n값의 위치까지 합.

        0, 1, 3, 6, 10, 15, 21, 28, ...
        0(0), 1(0+1), 3(0+1+2), 6(0+1+2+3)...
        패턴 : n번째의 값은 [0부터 값의 위치]까지 더한 값입니다.
     */
    public int[] sumOfN(int n) {
        int sum=0;
        int[] sumArr;
        
        if(n>0) {//+인 경우.           
            sumArr = new int[n+1];//인풋크기만큼 배열생성
            for (int i=0; i<=n; i++) { // +인경우 0 ~ n 반복.
                sum = sum + i; //각 값더하기.
                sumArr[i] = sum;//결과값 새 배열에 담기.
            }
        }else {// -인 경우.
            sumArr = new int[(-n)+1];//인풋크기만큼 배열생성
            
            for (int i=0; i>=n; i--) { //마이너스인경우에는 -n ~ 0 반복.
                sum = sum + i; //각 값더하기.
                sumArr[-i] = sum;//결과값 새 배열에 담기.
            }
        }
        return sumArr;
    }

    /*
문제 5.암스트롱 수

        입력된 숫자가 암스트롱 수 인지 확인하시오.
        (암스트롱 수 : 세 자리의 정수 중에서 각 자리의 수를 세 제곱한 수의 합과 자신이 같은 수)
        ex) 153 == (1 * 1 * 1) + (5 * 5 * 5) + (3 * 3 * 3)
     */
    public boolean isArmStrongNum(int num) {
        
        boolean check=false;
        int temp,result, n1, n2, n3=0;
        temp = num; // 인풋값 저장.(각 정수값 구하기 위해)
        n3 = temp%10; // 세번쩨 정수 저장

        temp=temp/10;
        n2= temp%10; //두번째 정수 저장

        temp=temp/10;
        n1=temp%10;//첫번째 정수 저장
    
        result=(n1*n1*n1)+ (n2 * n2 * n2) + (n3* n3 * n3);

        if(num==result) { //인풋값과 결과값 같으면
            check=true; // 암스트롱 숫자이므로 true.
        }
        return check;
    }

    /*

문제 6. 첫, 마지막글자 제거
        예시된 문자열의 첫 글자와 마지막 글자를 제거하시오. (입력은 항상 3자 이상)
     */
    public String removeChar(String str) {
        String tempStr="";
        if(str.length() >= 3) { //3자이상인 경우.
        
            
            //substring API (Application Programming Interface)
            //substring(int begin, int end)
            //(begin <= i < end) 시작값포함, 종료값 미포함..
        tempStr=str.substring(1, (str.length()-1)); //인풋값 0 제외(자르고) 1부터 (배열길이-1)만큼. 종료값은 미포함이므로.
    
        }
        return tempStr;
    }

    /*
문제 7.암호 마스킹 처리
        암호가 포함 된 SQL 연결 URL을 받는 함수가 있다.
        예시된 URL에서 암호를 마스킹(*) 처리 하라.표로 암호를 변경해야합니다.
    전제 조건 :
        - 비어 있지 않은 유효한 URL
        - 암호는 항상 password= 오른쪽에 나타납니다.
        - 단순화를 위해 비밀번호에는 & 기호가 포함되지 않는다고 가정합니다.
        - 보다 실제화하기 위해 비 ASCII 문자를 사용합니다.?????????
        - "password="및 "user="는 한 번만 나타납니다.
        - 빈 암호는 검증되지 않지만 최상의 솔루션은 빈 암호를 고려합니다.
     */
    public String maskingPw(String url) {
        String result="";
        //url주소 배열에 담기.
        char[] urlArr = new char[url.length()]; // 입력된 url길이만큼 배열생성.

        for(int i=0; i<url.length();i++) {
            urlArr[i] = url.charAt(i); //인풋된 url값을 각각 배열에 담는다.
        }
        int idx,testIdx=0;
        //비번 (*로 바꾸기위해) 위치찾기.
        idx = url.indexOf("password=")+9; // password=를 찾고 +9만큼 해주면패스워드 다음 위치.
        
        //비번 다음으로 &가있으면 ..
        for (int i=idx; i<urlArr.length;i++) {//비번부터 끝까지 점검.
            if(urlArr[i]=='&') { //&가 나오면 .
                testIdx =i; //나온 인덱스 잡아내기.
            }
        }
        if(testIdx==0) {//만약 &가 나오지 않은경우 testIdx 는 0이므로 나오지 않은경우.
            for (int i=idx; i<urlArr.length;i++) { // 위치부터 url 끝까지 별로 대체.
                urlArr[i]='*';
            }
        }else { //&가 나온경우. testIdx의 값이 비밀번호가 끝나는 위치임을 알수있다.
            for (int i=idx; i<testIdx;i++) { // 위치부터 &앞 까지 별대체.
                urlArr[i]='*';
            }
        }
            
            for(int i=0;i<urlArr.length;i++) { // *대체가 완료된 배열의 값을 추출한다.
                result = result + urlArr[i];
            }
        return result; //가공된 url 리턴.
        
    }

    /*
문제 8. a-b사이 모든 숫자의 합.

        두 정수(integer) a와 b는 양수 또는 음수 일 수 있다.
        a와 b 사이에 존재하는 모든 숫자의 합을 구하라.
        만약, 두 숫자가 동일하다면 a 또는 b의 값이 반환된다.
        (주, a와 b는 정렬된 숫자가 아니다.)

        getSum(1, 0) == 1 // 1 + 0 = 1
        getSum(1, 2) == 3 // 1 + 2 = 3
        getSum(0, 1) == 1 // 0 + 1 = 1
        getSum(1, 1) == 1 // 1 Since both are same
        getSum(-1, 0) == -1 // -1 + 0 = -1
        getSum(-1, 2) == 2 // -1 + 0 + 1 + 2 = 2
     */
    public int getSum(int a, int b) {
        int sum=0;
        if(a==b) {//두숫자 같은경우.
            sum= a;
        }else {
            if(a<b) {//a < b 이면
                for(int i=a; i<=b; i++) {//a~b 까지.
                    sum=sum+i;//더한다.
                }
            }else {//b < a 이면
                for(int i=b; i<=a; i++) {//b~a 까지.
                    sum=sum+i;//더한다.
                }
            }
        }
        return sum;
    }

    /*
문제 9. 계산기.

        첫 번째와 세 번째 값은 숫자이다.
        두번째 값은 문자이다.
        만약 문자가 "+", "-", "*", "/"라면, 메서드는 입력된 문자에 해당하는 연산 결과를 반환한다.
        만약 정해지지 않은 문자가 입력된다면 메서드는 null을 반환한다.

        calculate(2,"+", 4); //Should return 6
        calculate(6,"-", 1.5); //Should return 4.5
        calculate(-4,"*", 8); //Should return -32
        calculate(49,"/", -7); //Should return -7
        calculate(8,"m", 2); //Should return null
        calculate(4,"/",0) //should return null
     */
    public Double calculate(final double numberOne, final String operation, final double numberTwo) {
        Double result = null;
        
        if(operation == "+") {
            //result = new Double(result);
            result = numberOne + numberTwo;
            
        }else if(operation == "-") {
            //result = new Double(result);
            result = numberOne - numberTwo;
        }else if(operation == "*") {
            //-0이 나오는 경우 고려해서 0으로대채하는 if문 생성.
            // 이 경우를 고려하지 않으면 -0이반환됨. 컴퓨터에 -0과 0 과 +0은 모두 다름.
            
            if(numberOne==0 && numberTwo <0) { // 0 * (-x) 인 경우:0
                                                
                result =0d;
            }else if(numberOne<0 && numberTwo==0) {//(-x) * 0 인 경우:0
                result =0d;
            }else {
            result = numberOne * numberTwo;
            }
        }else if(operation == "/") { // x / 0 인경우 null
            if(numberTwo == 0) {
                result = null;
            }else if(numberOne==0 && numberTwo<0) { // 0/(-x)인 경우: 0
                result = 0d;
            }else {
            result = numberOne / numberTwo;
            }
        }else {
            result = null;
        }


        return result;  
    }


}




반응형