알튜비튜_06_일차원배열(2)
백준 10807 - 개수세기

풀이과정
1) 정수 N을 입력받고, 배열 array[N]을 for문을 이용해서 N개만큼의 정수를 입력받는다.
2) 찾으려는 정수 v를 입력받는다.
3) for 문과 if문을 활용해서 배열 array[N] == v라면 count +=1 ;를 해준다.
4) 마지막으로 count를 출력한다.
C언어로 풀어보자.
#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
int array[N];
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
int v;
scanf("%d", &v); // 찾으려는 정수
int count;
for (int i = 0; i < N; i++) { // v가 몇 개인지 세기
if (array[i] == v) {
count += 1;
}
}
printf("%d\n", count);
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[] numbers = new int[N];
for (int i = 0; i < N; i++) {
numbers[i] = sc.nextInt();
}
int v = sc.nextInt(); // 찾으려는 정수
int count = 0; // v가 몇 개인지 세기
for (int i = 0; i < N; i++) {
if (numbers[i] == v) {
count++;
}
}
System.out.println(count);
}
}
Python으로도 풀어보자.
N = int(input()) # 정수의 개수
numbers = list(map(int, input().split())) # N개의 정수
v = int(input()) # 찾으려는 정수
count = numbers.count(v) # v가 몇 개인지 세기
print(count)
백준 5597 - 과제 안 내신 분 ..?

풀이과정
1) 첫번쨰 for문에서, scanf로 28명의 학생을 입력받고 제출한 학생은 1로 표시된다.
2) 두번째 for문에서는, 제출하지 않은 학생의 번호를 출력한다. '0'인 경우 제출하지 않은 학생이다.
* 인덱스가 0부터 시작하기 때문에 학생번호에 맞추기 위해서 i+1 을 사용함.
C언어로 풀어보자.
#include <stdio.h>
int main() {
int submitted[30] = {0}; // 제출한 학생을 체크할 배열
int number;
for (int i = 0; i < 28; i++) {
scanf("%d", &number);
submitted[number - 1] = 1; // 제출했음을 표시
}
for (int i = 0; i < 30; i++) { // 제출하지 않은 학생 번호 출력
if (submitted[i] == 0) {
printf("%d\n", i + 1); //인덱스가 0부터 시작하기 때문에 학생번호에 맞추기 위해서 i+1 을 사용함.
}
}
}
Java로도 풀어보자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] submitted = new int[31];
for(int i=1; i<29; i++) {
int number = sc.nextInt();
submitted[number] = 1;
}
for(int i=1; i<submitted.length; i++) {
if(submitted[i]!=1)
System.out.println(i);
}
sc.close();
}
}
Python으로도 풀어보자.
# 1부터 30까지의 출석번호를 가진 학생 리스트
all_students = set(range(1, 31))
# 28명의 제출한 학생 번호를 입력받아 차집합으로 미제출자 찾기
for _ in range(28):
all_students.remove(int(input()))
# 남은 두 명의 학생 번호를 정렬하여 출력
missing_students = sorted(all_students)
print(missing_students[0])
print(missing_students[1])
백준 3052 - 나머지

풀이과정
1) 10개의 정수를 입력받아야 한다. 그리고 그것을 'temp'라는 변수에 저장한다.
2) num[temp % 42] = 1;
--> 배열의 인덱스로 사용하여 해당 위치의 값을 1로 설정한다. ('0'이 아닌값으로 설정하면 된다.)
--> 이렇게 하면 입력된 정수의 나머지 값이 중복되지 않도록 기록된다.
ex) 예를 들어서 입력된 숫자가 83이면, 83 % 42 = 41이므로 num[41]의 값이 1이 된다.
3) num[i]의 값이 1이면 count의 값을 증가시킨다.
--> 이는 해당 나머지 값이 최소 한 번은 입력에 나타났다는 의미이다.
C언어로 풀어보자
#include <stdio.h>
int main() {
int num[42] = {0};
int temp;
for (int i = 0; i < 10; i++) {
scanf("%d", &temp);
num[temp % 42] = 1;
}
int count = 0;
for (int i = 0; i < 42; i++) {
if (num[i] == 1) {
count += 1;
}
}
printf("%d\n", count);
return 0;
}
Java 로 풀어보자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean[] num = new boolean[42]; // 0 ~ 41
int count = 0;
for (int i = 0; i < 10; i++) {
int temp = sc.nextInt() % 42;
if (!num[temp]) { // num[temp]가 0인 경우에만(처음 등장) () 안이 1이 됨
num[temp] = true;
count += 1;
}
}
System.out.println(count);
sc.close();
}
}
Python으로 풀어보자.
import sys
input = sys.stdin.readline
num = []
for i in range(10):
temp = (int(input()))%42
if temp not in num:
num.append(temp)
print(len(num))