//중복없는 배열
//예 4 1 3 2
//배열의 길이 n =4
//1~4까지 숫자가 한번씩 들어있는지 확인
//return true
//예 4 1 3
//1~3까지 숫자가 한번씩 들어있는지 확인
//return false

/*
방법1 . 첫번째 인덱스부터 마지막 인덱스까지 순회하면서 다음을 수행해 봅니다.
1. 범위를 벗어나는 값이 있는지 확인해 보기
2. 범위를 벗어나지 않는 값이 몇 번 등장하는지 체크하기
*/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
#include<vector>
using namespace std;
 
int chk[100001={0}; //입력으로 들어오는 숫자가 10만 이고 그 이하 출력되는 자연수 10만 이하여서
bool solution(vector<int>arr)
{
    int n = arr.size(); //배열 길이 저장할 변수
    //배열의 각 원소 순회
    for(int i=0;i<n;++i)
    {
        //만약 배열을 벗어나는 숫자가 있다면
        if(arr[i] < 1 || arr[i] >n)
             return false;
        chk[arr[i]]++;//arr의 i번재 숫자가 check배열의 index로 들어가서 한개씩 들어가면 된다면 옳은 값이 나올 수 있게 만들어준다.
        //값이 몇번 나타났는지 갯수를 셈을 하게 된다.
    }
    //범위 벗어나는 값은 없으니까 1부터 n까지
    for(int i=1;i<=n;++i)
    {
        //체크 배열의 숫자가 1인지 확인
        if(chk[i]!= 1)
        return false;
 
    //1이 맞다면 true다
        return true;
    }
}
 
 
cs


/*
방법2 . 먼저 배열을 정렬합니다.
정렬된 배열을 순서대로 순회하면서 1부터 n까지의 숫자가 모두 있는지 확인합니다.
//->첫번째 원소부터 마지막 원소까지
//1부터n까지 숫자가 한번씩 나오는지
//없는 숫자,같은숫자 중복, 범위 벗어나는 숫자 나타나면 false
*/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
#include <vector>
#include <algorithm>
using namespace std;
 
bool solution(vector<int> arr)
{
    sort(arr.begin(),arr.end());
    for (int i = 0; i < arr.size(); ++i)
    //위에서 정렬을 시켜줬기 때문에 배열 인덱스0부터 숫자 1부터 비교를 하면 정확하게 일치하는지 확인 할 수 있다.
        if (arr[i] != i + 1)//배열에서는 0인 인덱스부터 비교가 되지만 숫자자체는 1부터 비교해야 하기 때문에 i+1를 해준것 위에 for문에서 i=0이다.
            return false;
 
    return true;
}
 
cs



JAVA풀이 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.Arrays;
import java.util.Scanner;
 
public class NTSbasic {
    public boolean solution(int[] arr) {
    
        boolean answer = true//일반적으로 answer는 true값을 리턴하게한다.
        
        int leng = arr.length;// 배열의 길이를 leng라는 인트형 변수로 둔다.
        /*
        for(int j=0;j<arr.length;j++) {
        System.out.println(arr[j]);
        }
        */
        //이것도 이해 안간다.
        boolean[] cu = new boolean[leng+1]; //새로운 boolean형 체크 배열을 만들어 준다. 이거는 길이에 +1해주는 이유가 0부터 시작하는게 아니라 1부터 가야 된다.
        //이거는 0~5까지 주어지는 배열에서 6개의 숫자가 들어간다 하면
        //1,2,3,4,5,6이 넣어져야 하니까 cu[1] = 1 =>이러면 true cu[2] = 2 , cu[3] = 3, cu[4] = 4, cu[5] = 5, cu[6] =6 으로 주어지게 된다. 
        
        for(int i=0;i<leng;i++){
            int temp = arr[i];//배열을 int형 변수 temp에 넣어 줄수 있다.그니까 arr[0]을 temp에 넣어주고
            //temp값은 int i값이 증가할때마다 계속 변화하므로 temp라는 변수를 써준것
 
            //만약에 temp가 leng 즉 배열의 길이보다 크다면 이것은 인덱스의 범위를 초과한 것이므로 false
            if(temp > leng) 
            return false;
 
            //만약에 1개씩 들어가야 하는 boolean cu배열에 temp인덱스가 들어가면 true가 나온다?
            //이것도 이해 안간다.
            //원래는 temp에다가 arr[i]를 넣으니까 1~6까지 숫자가 들어간다.
            //그래서cu[temp] 에서도 1~6까지 숫자가 들어가야 한다.
            //cu[temp] 1~6의 숫자가 넣어지면 true값이 되고 
           // cu[temp] = true; 
 
            //이제 만약 true값이 이미 주어진경우 한번이라도 나온 것이기 떄문에 중복이면 안된다. 따라서 true값이 나왔다면 이제 false로 바꿔준다.
            //즉 cu[1] = true인데 다시 cu[1] 이 나오면 false가 된다 즉 배열안에 중복이 선언된거니까 false를 출력해준다.
            if(cu[temp] == true) {
                return false;
            }else //true값이 아니라면 한번도 나온 것이 아니기때문에 true로 변환시켜줘서 위로 갈떄 다시 true가 되면 중복되는걸로 확인함.
            //여기서 반드시 if(cu[temp]==true) 먼저 해줘야함 먼저 해줘야 else로 바로 넘어가서 true로 바꿔주는데 먼저 true로 넣어버리면 다 true라서 false로 다바꿔짐
                return true;
 
        }
       
        return answer;
    }
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        String input = new String(); // 입력받은 정수 문자열
        input = sc.nextLine();
       
        input = input.substring(1, input.length()-1);
        String[] array = input.split(",");
        int[] arr = Arrays.asList(array).stream().mapToInt(Integer::parseInt).toArray();
 
        System.out.println(arr.length);
 
        NTSbasic sol = new NTSbasic();
       
       System.out.println(sol.solution(arr));
       }
}
 
Colored by Color Scripter
cs
 
cs


우선 C++ 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//자연수 N의 1의 자리 숫자를 구하면
//10으로 나눈 나머지를 구하면 된다.
//1의 자리 숫자를 구하기 123 % 10 = 3;
//필요 없어진 1의 자리 숫자를 제거하고 1의 자리를 제거하기 위해서 10으로 나눈 몫을 계산
//123 / 10 = 12 -> 이는 123의 10의 자리와 100의 자리를 오른쪽으로 한칸 이동한 결과와 같다
//12의 1의자리를 구하면 123의 10의자리를 구한것과 같다.
 
 
//예제 123
//123 % 10 = 3 ->1의 자리 구함
//123 / 10 = 12
//12 % 10 = 2 ->10의 자리 구함
//12 / 10 = 1
//1 % 10 = 1 -> 100의 자리 구함
//1 / 10 = 0 -> 더이상 이동시킬 자리수가 없다는 사실을 알게 됨
//각 자리수 3 2 1 을 더한 6을 리턴하면 됩니다.
#include <iostream>
 
using namespace std;
int pretest1(int n){
 
    int sum = 0;
    while(n>0)
    {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}
int main(){
 
    int n;
 
    scanf("%d",&n);
 
    printf("%d\n", pretest1(n));
    return 0;
}
cs


JAVA풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
import java.util.*;
import java.util.StringTokenizer;
public class Solution {
    public int solution(int n) {
        
        Scanner sc = new Scanner(System.in);
        
        int answer = 0;
        StringTokenizer st = new StringTokenizer();
        st = sc.nextToken("");
        int sum =0;
        
        for(int i=0;i<st;i++)
        sum += st;
        
        System.out.println(sum);
        
        return answer;
    }
}
*/
import java.util.*;
 
public class Solution {
    public int solution(int n) {
 
    int sum = 0;
    while(n>0)
    {
        sum += n % 10//10으로 나눠줘야 1의자리 ,10의자리, 100의자리 를 구할 수 있는 포인트가 인상깊다.
        n /= 10//오른쪽으로 시프트 해줄때 10으로 나눠준다는 포인트가 참 인상 깊다
    }
    return sum;
}
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//한 개의 단어를 입력받아서 거꾸로 뒤집어 출력하는 작업을 반복하다가 "END"라고 입력이 되면 종료하는 프로그램을 작성하시오. 
//입력받는 단어의 길이는 20이하이다.
import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        String str;
        int i,j,len;
 
        for(i=0;;i++){
            str = sc.nextLine();
            if(str.equals("END"))
            break;
            len = str.length();
            for(j=len-1;j>=0;j--){
                System.out.print(str.charAt(j));
            }
                System.out.println();
            }
        }
    }
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//5개의 단어(각 단어는 100자 이하)를 입력받은 후 문자와 문자열(100자 이하)을 한 개씩 입력받아 나중에 입력받은 문자나 문자열이 포함된 단어를 모두 출력하는 프로그램을 작성하시오. 찾는 단어가 없으면 “none”이라고 출력한다.
import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String ck1,ck2;
        String str[] = new String[5];
        int i,j,len,cnt=0;
 
        for(i=0;i<5;i++){
            str[i] = sc.next();
        }
        ck1 = sc.next();
        ck2 = sc.next();
        
        for(i=0;i<5;i++){
            if(str[i].indexOf(ck1)>-1 || str[i].indexOf(ck2)>-1){//indexOf 문자열의 위치를 리턴 즉,ck1의문자와 ck2의 문자열에 위치에 해당하는 문자가 나오면 출력해준다.
                cnt++;
                System.out.println(str[i]);
            }
        }
        if(cnt==0)
        System.out.println("none");
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//10 이하의 정수 n을 입력받고 n개의 문자열을 입력받은 후 그 크기를 비교하여 가장 작은 문자열부터 차례로 출력하는 프로그램을 작성하시오. 
//문자열의 길이는 100자 이하다. 사전순(아스키코드순)으로 뒤에 나오는 것을 큰 것으로 한다.
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str[] = new String[10];
        String temp;
        int i,j,num;
 
        num = sc.nextInt();
 
        for(i=0;i<num-1;i++){//i는 앞숫자 배열
            for(j=i+1;j<num;j++){//j는 뒷숫자 배열
                if(str[i].compareTo(str[j])>0){//양수면 아스키코드에서 1-2 이런식으로 되어야지 순차적인데 이래서 음수가 나와야되는데 양수가 나오면
                    //역순으로 다시 다 바꾸어주어야 하마.
                    temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                }
            }
        }
        for(i=0;i<num;i++){
            System.out.println(str[i]);
        }
    }
}

c)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//단어를 입력받다가 "0"을 입력받으면 입력을 종료하고 그 때까지 입력받은 단어의 개수를 출력하고 홀수 번째 입력받은 단어를 한 줄에 1개씩 출력하는 프로그램을 작성하시오. 
//단어의 개수는 50개를 넘지 않고, 단어의 길이는 100자 이하이다.
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str[] = new String[50];
        String mun;
        int i,j;
 
        for(i=0;i<50;i++){
            mun= sc.next();
            if(mun.equals("0"))//0이 입력되면 종료하고
            break;
            str[i] = mun;
        }
        System.out.println(i); //그떄까지 받은 수 i++중이었으므로 이것이 바로 cnt함수가 된다.
        for(j=1;j<=i;j++){//홀수를 위해 1부터 시작한 것이고
            if(j%2==1)
            System.out.println(str[j-1]); //배열은 어차피 첫번쨰수가 0번쨰이므로 0부터 출력한다.
        }
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//"flower" "rose" "lily" "daffodil" "azalea" 5개의 단어를 초기화한 후 한 개의 문자를 입력받아서 입력받은 문자가 두 번째나 세 번째에 포함된 단어를 모두 출력하고 마지막 줄에 출력한 단어의 개수를 출력하는 프로그램을 작성하시오.
//해당되는 단어가 없으면 "0"만 첫 줄에 출력한다.
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str[] ={"flower","rose","lily","daffodil","azalea"};
        String mun;
        int i,j,len,cnt=0;
 
        mun = sc.next(); //한 문자 입력받을 것입니다.
 
        for(i=0;i<5;i++){
            len = str[i].length();
            for(j=0;j<len;j++){
                if(j==1 && str[i].charAt(j) == mun.charAt(0)){//j==1즉 두번쨰 문자이고 입력받은 문자랑 그 안에 속한 문자가 같을때
                    cnt++;
                    System.out.println(str[i]);
                    break;
                }else if(j==2 && str[i].charAt(j) == mun.charAt(0)){//j==2즉 세번쨰 문자이고 입력받은 문자랑 그 안에 속한 문자가 같을떄
                    cnt++;
                    System.out.println(str[i]);
                    break;
                }
            }
        }
        System.out.println(cnt);//출력한 단어의 갯수 출력
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//공백을 포함한 문자열을 입력받아 각 단어로 분리하여 문자열 배열에 저장한 후 입력순서의 반대 순서로 출력하는 프로그램을 작성하시오. 문자열의 길이는 100자 이하이다.
//내 풀이
 
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
 
        String str = sc.next();
        StringTokenizer st = new StringTokenizer(str);
        
        String str2 = st.nextToken(str," ");
        
        int len = str.length();
        for(int i=0;i<str.length();i++){
 
            String str3[] = new String[i]; 
        }
 
        for(int str.length();;i--){
            System.out.println(str3);
        }
    }
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str;
        char[][] ch = new char[50][20];
        int i,len,x,y;
        str = sc.nextLine();
        len = str.length();
 
        x=0;
        y=0;
        for(i=0;i<len;i++){
            if(str.charAt(i) == ' '){//공백일경우
                ch[x][y] = '\0';//문자열 배열에 공백 저장 아무것도 없는 상태 x값만 증가시켜주고 y값은 0
                x++;
                y=0;
                continue;
            }
            else{//공백아닐경우
                ch[x][y++= str.charAt(i);//문자열배열에 이제 값을 넣어준다.x값(행)은 그대로고 y값(열)만 증가시켜서 값을 넣어줌
            }
        }
        ch[x][y] = '\0';//배열에 다시 공백계속 넣어줌? 이해 안감
 
        for(i=x;i>=0;i--){
            System.out.println(ch[i]);//2차원 배열이었었는데 1차원 배열로 출력할 수 있었단 말이야?신기하군
        }
    }
}
cs


+ Recent posts