첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.
# 출력
A+B+C의 값을 출력한다.
# 제출한 소스코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long c = sc.nextLong();
System.out.println(a + b + c);
}
}
public class Main {
public static void main(String[] args) {
System.out.println("2022-11-30");
}
}
오늘 날짜를 그냥 출력한 것
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Date date = new Date();
DateFormat df = new SimpleDateFormat("YYYY-MM-dd");
df.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));
System.out.println(df.format(date));
}
}
이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
# 입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다.
주어지는 수는 100보다 작은 자연수 또는 0이다.
# 출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다.
최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
# 제출한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int maxNum = -1;
String result = "";
for ( int i = 1; i <= 9; i++ ) {
st = new StringTokenizer(br.readLine());
for ( int j = 1; j <= 9; j++ ) {
int tempNum = Integer.parseInt(st.nextToken());
if ( tempNum > maxNum) {
maxNum = tempNum;
result = i + " " + j;
}
}
}
System.out.println(maxNum + "\n" + result);
}
}
9x9 격자판의 수가 모두 0일 경우의 수를 생각하지 못하고 maxNum 변수에 초기값으로 0일 넣었었다. 위 제출한 코드에서는 maxNum 변수를 -1로 초기값을 할당해 문제를 해결할 수 있게 되었다.
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
# 입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다.
색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다.
색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
# 출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
# 제출한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st;
int[][] numArr = new int[101][101];
for ( int i = 0; i < n; i++ ) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
for ( int j = x; j < x + 10; j++ ) {
for ( int k = y; k < y + 10; k++ ) {
numArr[j][k] = 1;
}
}
}
int result = 0;
for ( int i = 0; i < 101; i++ ) {
for ( int j = 0; j < 101; j++ ) {
result += numArr[i][j];
}
}
System.out.println(result);
}
}
N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.
# 출력
첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다.
행렬의 각 원소는 공백으로 구분한다.
# 제출한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] numArr = new int[n][m];
for ( int i = 0; i < 2; i++ ) { // 2개의 행열을 입력 받는다.
for ( int j = 0; j < n; j++ ) { // n 개의 행을 입력 읽는다.
st = new StringTokenizer(br.readLine());
for ( int k = 0; k < m; k++ ) { // n번째 줄의 m번째 열
if ( i == 1 ) { // B 번째 행열을 입력 받으면 기존 A 행열에 더한다.
numArr[j][k] = numArr[j][k] + Integer.parseInt(st.nextToken());
} else { // A 번째 행열을 입력 받는다.
numArr[j][k] = Integer.parseInt(st.nextToken());
}
}
}
}
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
System.out.print(numArr[i][j] + " ");
}
System.out.println();
}
}
}
의식의 흐름대로 작성한 코드, 너무 투박하고 코드가 복잡해 보인다.
2차원 배열 정수를 입력 받기 위해 numArr 이라는 2차원 배열을 선언했다.
3중 for문을 사용해서 A 와 B의 행열을 입력 받고 더하는 로직을 구현했다.
2중 for문을 사용해서 덧셈이 완료된 행열을 출력했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] numArr = new int[n][m];
for ( int i = 0; i < 2; i++ ) {
for ( int j = 0; j < n; j++ ) {
st = new StringTokenizer(br.readLine());
for ( int k = 0; k < m; k++ ) {
numArr[j][k] += Integer.parseInt(st.nextToken());
}
}
}
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
System.out.print(numArr[i][j] + " ");
}
System.out.println();
}
}
}
3중 for문 안에 있던 if문 제거
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] numArr = new int[n][m];
for ( int i = 0; i < 2; i++ ) {
for ( int j = 0; j < n; j++ ) {
st = new StringTokenizer(br.readLine());
for ( int k = 0; k < m; k++ ) {
numArr[j][k] += Integer.parseInt(st.nextToken());
}
}
}
StringBuilder sb = new StringBuilder();
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
sb.append(numArr[i][j] + " ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}