import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // 시작할 값. -50 ~ 50
int m = sc.nextInt(); // 곱할 값. -50 ~ 50
int d = sc.nextInt(); // 더할 값. -50 ~ 50
int n = sc.nextInt(); // 몇 번째. 10 이하의 자연수
if (n == 1) {
System.out.println(a);
return;
}
long result = a;
for (int i = 2; i <= n; i++) {
result = result * m + d;
}
System.out.print(result);
}
}
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 day = 1;
while (day % a != 0 || day % b != 0 || day % c != 0) {
day++;
}
System.out.print(day);
}
}
최소공배수를 구하는 문제. 세 수의 모든 배수가 될 때까지 날짜를 증가시켰다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
String[] arr = br.readLine().split(" "); // 부를 숫자들
int[] nums = new int[24]; // 횟수 저장 배열
for (int i = 0; i < arr.length; i++) {
nums[Integer.parseInt(arr[i])]++;
}
for (int i = 1; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
String[] arr = br.readLine().split(" ");
for (int i = n - 1; i >= 0; i--) {
System.out.print(arr[i] + " ");
}
}
}
저장된 배열만 거꾸로 출력시켰다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
String[] arr = br.readLine().split(" ");
int min = 24;
for (int i = 0; i < n; i++) {
if (min > Integer.parseInt(arr[i])) min = Integer.parseInt(arr[i]);
}
System.out.print(min);
}
}
최소값을 찾는 문제. 배열의 처음부터 끝까지 돌면서 최소값을 찾는다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[20][20];
int x, y;
for (int i = 0; i < n; i++) {
x = sc.nextInt();
y = sc.nextInt();
arr[x][y] = 1;
}
for (int i = 1; i < 20; i++) {
for (int j = 1; j < 20; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
추가로 입력받은 좌표만 1로 바꾸어 주고, 이차원배열의 모든 값을 출력시켰다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int[19][19];
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
arr[i][j] = sc.nextInt();
}
}
int n = sc.nextInt();
int x, y;
for (int i = 0; i < n; i++) {
x = sc.nextInt() - 1;
y = sc.nextInt() - 1;
for (int j = 0; j < 19; j++) {
if (arr[x][j] == 0) arr[x][j] = 1;
else arr[x][j] = 0;
}
for (int j = 0; j < 19; j++) {
if (arr[j][y] == 1) arr[j][y] = 0;
else arr[j][y] = 1;
}
}
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
추가로 입력받은 좌표값의 x행과 y열을 반대 값으로 바꿔준 뒤, 배열의 모든 값을 출력시켰다.
import java.util.Scanner;
public class CodeUp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt(); // 세로
int w = sc.nextInt(); // 가로
int[][] arr = new int[h][w];
int n = sc.nextInt(); // 막대의 개수
int l; // 막대의 길이
int d; // 막대를 놓는 방향. 가로:0, 세로:1
int x, y; // 좌표
for (int i = 0; i < n; i++) {
l = sc.nextInt();
d = sc.nextInt();
x = sc.nextInt() - 1;
y = sc.nextInt() - 1;
for (int j = 0; j < l; j++) {
if (d == 0) {
arr[x][y + j] = 1;
} else {
arr[x + j][y] = 1;
}
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
방향이 가로일 경우 오른쪽으로 l만큼 증가시키면서 값을 1로 바꾸었다. 방향이 세로일 경우 아래쪽으로 l만큼 증가하면서 값을 1로 바꾸었다. 마지막은 배열의 모든 값을 출력시켰다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int[10][10];
int x = 1, y = 1; // 시작 좌표
for (int i = 0; i < 10; i++) { // 이차원 배열 초기화
for (int j = 0; j < 10; j++) {
arr[i][j] = sc.nextInt();
}
}
while (true) { // 미로찾기
if (arr[1][1] == 0) arr[1][1] = 9; // 첫 시작이 0이면 9로 값 변경
else if (arr[1][1] == 2) { // 처음부터 먹이를 찾았을 경우 9로 바꾸고 종료.
arr[1][1] = 9;
break;
}
if ((x == 9 && y == 9) || (arr[x][y + 1] == 1 && arr[x + 1][y] == 1)) break; // 가장 우측하단에 있거나 이동할 수 없을 경우 종료.
if (arr[x][y + 1] != 1) { // 오른쪽으로 갈 수 있을 때
if (arr[x][y + 1] == 2) { // 오른쪽 값이 먹이일 때
arr[x][++y] = 9; // 오른쪽으로 이동 후 값 변경
break;
}
arr[x][++y] = 9;
} else if (arr[x + 1][y] != 1) { // 오른쪽은 막히고 아래로 가야할 때
if (arr[x + 1][y] == 2) { // 아래가 먹이일 때
arr[++x][y] = 9; // 아래로 이동 후 값 변경
break;
}
arr[++x][y] = 9;
}
}
for (int i = 0; i < 10; i++) { // 전체 출력
for (int j = 0; j < 10; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
기초 문제임에도 모르거나 막히고 까먹는 부분도 있었다.
(Math 함수, 자료형의 범위, 형변환 등)마지막 문제는 기초문제임에도 문제를 푸는데 생각보다 시간이 많이 걸렸다. 조건에 따라 값을 변하게 시키는데도 어떻게 조건을 쓰느냐에 따라 오류가 발생할수도 있음을 다시 한 번 상기시켰다.
처음부터 공부할 수 있어서 쉽고 즐거웠으나, 정말 중요한 기본적인 개념이 아직 부족함을 느꼈다. 자바의 기초부터 다시 공부해야겠다.