알튜비튜_06_1차원배열(1)
배열(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)