동아리/Early-알튜비튜

알튜비튜_06_1차원배열(1)

대학기록 2024. 11. 11. 10:39

배열(array)이란, 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장장소 이다. 
 
배열 사용의 장점
1) 데이터를 순차적으로 저장할 수 있다.
2) 인덱스를 이용해서 원소에 접근한다. 
3) 반복문을 이용하기에 좋은 구조이다. 
 
 
 
 
 
배열의 인덱스(index) 는 배열 원소의 번호로 배열의 시작 위치에서부터 데이터가 있는 상대위치를 나타낸다. 
인덱스는 0부터 시작한다 !!

 
 
 
 
 
배열의 선언
 
형식 : 자료형 배열이름[배열 크기];
ex) int ewha[5];
 
int ewha[5] = {1,2,3,4,5};       --> 배열의 선언과 동시에 초기화됨.
int ewha[] = {1,2,3,4,5};         --> 배열의 크기가 주어지지 않았는지만, 자동적으로 초기값의 개수만큼 크기가 잡힘.
--> [1,2,3,4,5] 가 출력된다. 
 
int ewha[5] = {1,2,3};
--> [1,2,3,0,0] 가 출력된다.     --> 초기값을 일부만 주면 나머지 원소들은 0으로 초기화됨.
 
int ewha[5] ={0};     
 
--> 배열을 반드시 초기화해서 사용해야 한다. 
 
 
 
 
 
 
1차원배열 
1) 배열의 인덱스는 0부터 시작
2) 배열의 마지막 인덱스는 배열의 크기 - 1
 
 
ewha = [1,2,3,4,5]
 
ewha[0] = 1
ewha[1] = 2
ewha[2] = 3
ewha[3] = 4
ewha[4] = 5
 

 
 
 
 
 
 
백준 10818번 - 최소,최대
 

 
1) 첫번째 줄의 입력값을 입력받는다. 
--> N
2) 배열과 for문을 이용해서 N개의 정수를 입력받는다. 
3) 배열을 이용해서 입력받았으므로, 출력할때도 배열을 이용하는 것이 편하다. 
-->   int max_result = arry[0];
       int min_result = arry[0];
4) if else 문을 이용해서 최댓값, 최솟값을 구해서 출력한다. 
 
 
 
 
C언어로 풀어보자
 
#include <stdio.h>
int main(void)
{
    int N;
    scanf("%d", &N);

    int arry[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &arry[i]);
    }

    int max_result = arry[0];
    int min_result = arry[0];

    for (int j = 0; j < N; j++) {
         if (arry[j] > max_result) {
            max_result = arry[j];
        }
        else if (arry[j] < min_result) {
            min_result = arry[j];
       }
    }
    printf("%d %d", min_result, max_result);
    
    return 0;
}
 
 
 
 
이제 Java로 풀어보자. 
 
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        int[] array = new int[N];
        
        for(int i=0;i<N;i++){
            array[i] = sc.nextInt();
        }
        
        int max_result = array[0];
        int min_result = array[0];
        
        for(int i=0;i<N;i++){
            if(array[i] > max_result){
                max_result = array[i];
            }
            else if(array[i] < min_result){
                min_result = array[i];
            }
        }
        System.out.println(min_result + " " + max_result);

        sc.close();
    }
}
 
 
 
 
Python 으로 풀어보자
 
import sys
input = sys.stdin.readline

N = int(input())
array = list(map(int,input().split()))
max_result = array[0]
min_result = array[0]

for i in range(N):
    if array[i] > max_result:
        max_result = array[i]
    if array[i] < min_result:
        min_result = array[i]
        
print(min_result,max_result)
 
 
 
 
 
 
 
백준 2577번 - 숫자의 개수
 

 
풀이과정
1) A*B*C 의 값을 num 이라고 지정하고, 배열을 선언하고 초기화한다.
2) array[10]을 만들어서 num의 각 숫자 개수를 배열에 저장한다. --> while 문
ex) 173037300이면 arr[10] = {3,1,0,2,0,0,0,2,0,0}
3) 배열을 출력한다. --> for문
 
 
 
 
C언어로 풀어보자. 
 
#include <stdio.h>
int main(void){
    int A, B, C;
    scanf("%d %d %d", &A, &B, &C);
    int num= A * B * C;

    int array[10] = { 0 };

    while (num>0) {
           array[num % 10]++;
           num /= 10;
    }

    for (int i = 0; i < 10; i++) {
        printf("%d\n", array[i]);
    }
}
 
 
array[num % 10]++; 에 대해서 설명을 덧붙혀보자면,
arr[1] = 0일때, arr[1]++; 을 하면, arr[1] = 1이 되는 것이다. 
 
즉, 이 문제에서 만약 num이 1300이면 (단, 매 순서마다 num /= 10 을 한다.)
(*num % 10 은 num의 가장 오른쪽 자릿수를 가져오는 표현이다.)
 
첫번째 array[num % 10]++; 을 하면, array[0]은 0에서 1이 되고
--> num 은 130 으로 변경된다. 
두번째 array[num % 10]++; 을 하면, array[0]은 1에서 2가 되고
--> num 은 13으로 변경된다. 
세번째 array[num % 10]++; 을 하면, array[3]은 0에서 1이 되고
--> num 은 1로 변경된다. 
첫번째 array[num % 10]++; 을 하면, array[1]은 0에서 1이 되면서
--> num 은 0이 되면서 루프가 종료된다. 
 
최종적으로,
array[0] 은 2번, array[1] 은 1번, array[3]은 1번 나왔으므로
 
즉 배열이 array[10] = {2,1,0,1,0,0,0,0,0,0} 가 되는 것이다. 
 
 
 
 
 
 
Java 로 풀어보자.
푸는 방법은 항상 같다. 
 
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();
        int num = A*B*C;
        
        int[] array = new int[10];           
        
        while(num>0){
            array[num % 10]++;
            num /= 10;
        }
        
        for(int i=0;i < 10;i++){
            System.out.println(array[i]);
        }

        sc.close();
    }
}

 
 
 
Python으로 풀어보자.
 
import sys
input = sys.stdin.readline

A = int(input())
B = int(input())
C = int(input())
num = A*B*C

array = [0]*10

while num > 0:
    array[num % 10] += 1
    num //= 10
for i in array:
    print(i)
 
 
 
 
 
 
 
백준 8958 - OX퀴즈
 

 
풀이과정
1) 이 문제의 핵심은 문제를 맞은 경우 '그 문제의 점수는 그문제까지 연속된 O의 개수가 된다' 라는 점을 유심히 봐야 한다. 
--> 따라서 여기서 1로 초기화 해야한다. 
ex) OOXXO  -->  1+2+0+0+1 = 4
2) 문자열의 길이는 strlen() 을 사용하여 알아낸다. 
 
 
 
 
 
C언어로 풀어보자.
 
#include <stdio.h>
#include <string.h>                                            //문자열 길이 반환 함수를 위해서 헤더파일 필요함
int main(){
    int N;
    scanf("%d",&N);
    
    for(int i=0;i<N;i++){
        char test[81];                                              //입력받을 문자열 저장(최대 길이 설정)
        scanf("%s",test);   
        int temp = 0;                                              //연속된 O의 개수를 저장할 변수
        int score = 0;                                             //점수 변수
        
        for(int j = 0;j < strlen(test) ; j++){
            if(test[j] == 'O'){
                temp++;                                             //'O'가 연속되면 temp 증가
            }
            else{
                temp = 0;                                           //'O'가 아니면 temp 초기화
            }
            score += temp;                                      //점수에 temp 추가
        }
        printf("%d\n",score);
    }
}
 
 
 
 
 
Java로 풀어보자.
 
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        sc.nextLine();
        
        for(int i = 0;i < N;i++){
            String test = sc.nextLine();
            
            int temp = 0;                                                //연속된 'O'의 개수를 저장할 변수
            int score = 0;                                               //점수 변수
            
            for(int j = 0;j < test.length(); j++){
                if(test.charAt[j] == 'O'){
                    temp++;                                             //'O'가 연속되면 temp 증가
                }
                else{
                    temp = 0;                                           //'O'가 아니면 temp 초기화
                }
                score += temp;                                      //점수에 temp 추가
            }
            System.out.println(score);
        }
        sc.close();
    }
}
 
 
 
 
Python으로 풀어보자.
 
import sys
input = sys.stdin.readline

N = int(input())

for i in range(N):
    test = list(input())
    temp = 0
    score = 0
    for j in test:
        if j == 'O':
            temp += 1:
        else:
            temp = 0
        score += temp
    print(score)