Programing

자바 기본 입문 테스트 문제

handam 2016. 4. 4. 22:35

테스트 문제를 풀어봅시다

  • 문제

int 배열의 수 중 3으로 나누어지는 수를 반환하세요.

public static void main(String[] args){
    int[] array = {1,2,3,4,5,6,7,8,9};
    int divisor = 3;
    int[] ret;

    int i = 0;
    for(int val : array){
        if(val % divisor == 0){
            i++;
        }
    }

    ret = new int[i];
    i = 0;

    for(int val : array){
      if(val % divisor == 0){
        ret[i] = val;
        System.out.println(ret[i]);
        i++;
      }
    }
}
  • 문제

가운데 글자를 되돌려주는 로직을 완성하세요. 문자열의 갯수가 홀수라면 1글자, 짝수라면 2글자를

public static void main(String[] args){
    String str = "power";
    String str1 = "testfiled";

    System.out.println(str.length());
    System.out.println(str.length() % 2);
    //나머지가 1이라면 홀수글자
    System.out.println(str.substring((str.length() / 2), (str.length() / 2)+1));
    //나머지가 0이라면 짝수글자
    System.out.println(str1.substring((str1.length() / 2)-1, (str1.length() / 2)+1));

}
  • 문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 10의 자릿수 합은 1+0이고, 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. isHarshad함수는 양의 정수 num을 매개변수로 입력받습니다. 이 num이 하샤드수인지 아닌지 판단하는 함수를 완성하세요. 예를들어 num이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.

public static void main(String[] args){
    int num = 352698;

    int jari = Integer.toString(num).length();
    int[] suArr = new int[jari];
    int sum = 0;

    for (int i = 0; i < jari; i++) {
        suArr[i] = Integer.parseInt(Integer.toString(num).substring(i, i+1));
        System.out.println(suArr[i]);
        sum += suArr[i];
    }
    System.out.println(sum);

    boolean ret;
    if (num % sum == 0) {
        System.out.println(true);
        ret = true;
    } else {
        System.out.println(false);
        ret = false;
    }

}

또 다른 방식, (풀고나서 인터넷으로 찾아봄)

public static void main(String[] args) {  
  int num=Integer.parseInt(args[0]);  
  int su=0;  
  int jarisu=0,sum=0;  

  while(num>0)  
  {  
   su = num % 10; //입력된 숫자가 들어있는 변수(123)의 나머지 값을 su에 넣음.   
   sum += su;    //su를 sum에 더함.  
   num = num / 10;//입력된 숫자를 10으로 나눠서 num변수에 담음.  
   jarisu++; //반복될대마다 자리수가 증가됨.  
  }  
   System.out.println("자 릿 수 : " + jarisu); //출력  
   System.out.println("총 합 : " + sum); //출력  
 }
  • 문제

int 배열의 평균을 구하세요.

public static void main(String[] args) {
    int[] array = {23,14,456,12,4,56};
    int sum = 0;
    for (int val : array) {
        System.out.println(val);
        sum += val;
    }
    System.out.println("average" + sum / array.length);
}   
  • 문제

높이만큼 삼각별 출력

public static void main(String[] args) {

    int sum = 8, sumSub = 0;
    String star = "*";
    StringBuffer sb = new StringBuffer();

    for (int i=0; i < sum; i++) {
        sumSub = (i+1);
        while (sumSub > 0) {
            sb.append(star);
            sumSub--;
        }
        sb.append("\n");
    }
}
  • 문제

높이만큼 별 출력 (역순)

public static void main(String[] args) {
    int sum = 5;
    int sumSub = 0;
    String star = "*";
    StringBuffer sb = new StringBuffer();

    for (int i=0; i < sum; i++) {
        System.out.println("for start...");
        sumSub = sum-i;
        while(sumSub != 0){
            System.out.println("while start...");
            sb.append(star);
            sumSub--;
        }
        sb.append("\n");
    }
    System.out.println(sb.toString());
}
  • 문제

reverseInt 메소드는 intn을 매개변수로 입력받습니다. n에 나타나는 숫자를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n118372873211을 리턴하면 됩니다. n은 양의 정수입니다.

public static void main(String[] args) {        
    int n = 118372;
    String nStr = Integer.toString(n);
    int[] arr = new int[nStr.length()];

    for (int i=0; i < arr.length; i++) {
        nStr.substring(i, i+1);
        arr[i] = Integer.parseInt(nStr.substring(i, i+1));
    }

    Arrays.sort(arr); //112378

    int temp;
    for (int i = 0; i < arr.length / 2; i++) {
        temp = arr[i];
        arr[i] = arr[(arr.length - 1) - i];
        arr[(arr.length - 1) - i] = temp;
    }

    String ret="";
    for (int val : arr) {
        ret += Integer.toString(val);
    }
    System.out.println(ret);
}
  • 문제

getMinMaxString 메소드는 String형 변수 str을 매개변수로 입력받습니다. str에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 String을 반환하는 메소드를 완성하세요. 예를들어 str이 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

public static void main(String[] args) {

    String str = "5 6 -9 3 -5 9";
    String[] strArr = str.split(" ");
    int[] iArr = new int[strArr.length];

    for (int i=0; i < strArr.length; i++) {
//      System.out.println(strArr[i]);
        iArr[i] = Integer.parseInt(strArr[i]);
    }
//  System.out.println("-------------------------");

    Arrays.sort(iArr);
//  for (int s : iArr) {
//      System.out.println(s);
//  }
//  System.out.println("-------------------------");

    String nStr="";
    for (int i=0; i < iArr.length; i++) {
        if (i == 0 || i == (iArr.length-1)) {
            nStr += (Integer.toString(iArr[i]) + (i == 0 ? " ":""));
        }
    } 

    System.out.println(nStr);

}

문제 중 sort() 이용 안하고 해보겠다고 삽질 좀 했던 문제

  • 문제

reverseStr 메소드는 String 형 변수 str 을 매개변수로 입력받습니다. str 에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 String 을 리턴해주세요. str 는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 예를들어 str이 "Zbcdefg""gfedcbZ"을 리턴하면 됩니다.

public static void main(String[] args) {
    String str = "AcbduZH", newStr= "";
    char[] charArr = str.toCharArray(); 

    int l=0, u=0;
    char c;
    for (int i = 0; i < str.length(); i++ ){
        c = str.substring(i, i+1).charAt(0);
        charArr[i] = c;
        if ((int)c < 91 )
            u++;
        else 
            l++;
    }

    char[] charUpperArr = new char[u];
    char[] charLowerArr = new char[l];
    l = 0;
    u = 0;
    for (int i = 0; i < str.length(); i++ ){
        if ((int)charArr[i] < 91 ){
            charUpperArr[u] = charArr[i];
            u++;
        } else { 
            charLowerArr[l] = charArr[i];
            l++;
        }
    }

    String lstr= "", ustr= "";
    if (charLowerArr.length > 0) {
        java.util.Arrays.sort(charLowerArr);
        lstr = String.valueOf(reverseCharArr(charLowerArr));
    }
    if (charUpperArr.length > 0) {
        java.util.Arrays.sort(charUpperArr);
        ustr = String.valueOf(reverseCharArr(charUpperArr));
    }

    newStr = lstr + ustr;
    //System.out.println("출력 : "+newStr);
    return newStr;


    //쉬운방법 (참고용)
//  String wordSt = "AcbduZH";
//    char[] word = wordSt.toCharArray();
//    for(int i=0;i<(word.length-1);i++){
//        for(int j=i+1;j>0;j--){
//          System.out.println(" i = "+ i);
//          System.out.println(" j = "+j);
//          
//          System.out.println("word[j] = "+word[j]);
//          System.out.println("word[j-1] = "+word[j-1]);
//          System.out.println("");
//            if(word[j]<word[j-1]){
//                char temp=word[j-1];
//                System.out.println("temp = "+temp);
//                word[j-1]=word[j];
//                word[j]=temp;
//                System.out.println("word[j] = "+word[j]);
//              System.out.println("word[j-1] = "+word[j-1]);
//              System.out.println("");
//            }
//        }
//    }
//    wordSt=String.valueOf(word);
//    System.out.println(wordSt);

}

public static char[] reverseCharArr(char[] ch) {
    char[] nch = new char[ch.length];
    int p= 0;
    for (int i = ch.length-1; i >= 0; i--) {
        nch[p] = ch[i];
        p++;
    }
    return nch;
}



/*
삽질의 흔적들.. 더 많지만 지저분해서 날림...
*/
public static String orderByChar(char[] arr ){
//  System.out.println("start orderByChar()...");

    String ret = "";
    //2개 이상일때
    if (arr.length > 2 ){
        for (int i=0; i < arr.length; i++) {
            int n = 0;
            char cn = arr[i];
//          char temp = arr[i];
            if ((i+1) < arr.length) {
                n = getCompareMinChar(cn, arr[i+1]);
                System.out.println("n 값 : "+ n);

                cn = arr[i+n];
                ret += cn;

            }
        }

    } else {
        ret += String.valueOf(arr[0]);
    }

    System.out.println("return orderByChar() : " + ret);

    return ret;
}

public static int getCompareMinChar(char a, char b ){
    System.out.println(a+" 비교 "+b);
//  int c = 0;
    if (transascii(a) < transascii(b) || transascii(a) == transascii(b))
        return 0;
    else
        return 1;
//  return c;
}

public static int transascii(char c) {
    return (int)c;
}

Arrays 클래스의 sort() 가 아닌 직접 구현해보고 싶었는데 아직 알고리즘에 대한 지식이 많이 부족해서 단순하게 풀려고 하다보니 더 꼬이고... 헛갈리고...



참조 : tryhelloworld (자바입문)


반응형