오늘은 다시 처음부터 알고리즘을 좀 더 어렵게 심화로 배운다.
저번에 했던 알고리즘 문제를 포함해 몇 주간 python을 했었는데,
갑작스레 java로 하려니 문법도 연산자도 제대로 기억이 안나서
페어 프로그래밍을 하는데 짐이 된 것 같다.
당분간 java에 다시 익숙해지는 시간을 가질 때가 되었다.
아래 연습문제들은 오늘 페어프로그래밍을 하며 풀었던 문제들이다.
페어 프로그래밍의 흔적들은 지우지 않았다.
내가 오늘 도움이 너무 안되었어서 내일은 java에 좀 더 익숙해져서
페어에게 도움이 된다면 좋겠다.
연습문제 1번 (https://www.acmicpc.net/problem/2839)
public class Solution1_1 {
public static int Solution(int n) {
int answer = 0;
if (n == 4 || n == 7)
answer = -1;
else {
if (n % 5 == 0)
answer = n / 5;
else if (n % 5 == 1)
answer = (n - 6) / 5 + 2;
else if (n % 5 == 2)
answer = (n - 12) / 5 + 4;
else if (n % 5 == 3)
answer = (n - 3) / 5 + 1;
else if (n % 5 == 4)
answer = (n - 9) / 5 + 3;
}
return answer;
}
public static void main(String[] args) {
System.out.println(Solution(18));
}
}
/*
1
2
3 3 =1
4
5 5 = 1
6 3.2 =2
7
8 5+3 =2
9 3.3 =3
10 5.2 =2
11 5 + 3.2 = 3
12 3.4 =4
13 5.2 + 3 =5
14 5 + 3.3 =4
15 5.3 =3
16 5.2 + 3.2 =4
17 5.1 + 3.4 = 5
18 5.3 + 3 = 4
19 5.2+ 3.3 = 5
20 5.4 = 4
21 5.3 + 3.2 = 5
22 5.2 + 3.4 =6
23 5.4 + 3 = 5
24 5.3 + 3.3 = 6
25 5.5 = 5
*/
/*1. 5로 나눴을때 맞아 떨어지면 최소값
2. 5로 나눴을때 안 맞아 떨어지고 나눈 값이 1보다 작으면 3으로 나눠보고 맞아 떨어지면 최소값
3. 5로 나눴을때 안 맞아 떨어지고 나눈 값이 1보다 작으면 3으로 나눠보고 안 맞아 떨어지면 -1
4. 5로 나눴을때 안 맞아 떨어지면 나머지 반환해서 3으로 나누고 맞아 떨어지면 최소값
5. 5로 나눴을때 안 맞아 떨어지고 나머지 반환하고 3으로 안 맞아 떨어지면 -1
n은 자연수
a = n을 5로 나눈 값
b = n을 5로 나눈 나머지
a = n / 5
b = n % 5
만약 b가 0이면 정답
*/
/* int a = n / 5; // n을 5로 나눈 몫
int b = n % 5; // n을 5로 나눈 나머지
if b = 0 ; //만약 n을 5로 나눠서 나머지가 0이면
return a ; //a를 반환한다 -> ex) n이 5면 답이 1이다
else // 만약 아니라면, a가 1보다 작다면 1. 3으로 나눠보고 나머지가 0이면 최소값
// 2. 3으로 나눠보고 나머지가 0이 아니라면 -1
// a가 1보다 크다면 3. 3으로 나눠보고 나머지가 맞아 떨어지면 최소값
// 4. 3으로 나눠보고 나머지가 안 맞다면 -1
while( n > 0)
if( b == 0) {
answer = n / 5;
}else if( a < 1 ) {
if (n % 3 == 0)
answer = n / 3;
else
answer = -1;
}else if ( a > 1)
answer
5로 나눴을때 맞아 떨어지면 최소값
2. 5로 나눴을때 안 맞아 떨어지고 나눈 값이 1보다
작으면 3으로 나눠보고 맞아 떨어지면 최소값
3. 5로 나눴을때 안 맞아 떨어지고 나눈 값이 1
작으면 3으로 나눠보고 안 맞아 떨어지면 -1
4. 5로 나눴을때 안 맞아 떨어지면
나머지 반환해서 3으로 나누고 맞아 떨어지면 최소값
5. 5로 나눴을때 안 맞아 떨어지고
나머지 반환하고 3으로 안 맞아 떨어지면 -1
n은 자연수
a = n을 5로 나눈 값
b = n을 5로 나눈 나머지
a = n / 5
b = n % 5
만약 b가 0이면 정답
}
*/
연습문제 2번 (https://www.acmicpc.net/problem/4948)
public class Solution1_2 {
public static int Solution(int n) {
int answer = 0;
int[] arr = new int[n];
for(int i = 0; i<arr.length; i++)
arr[i] = n + i;
for(int a : arr)
if(a == 2 || a ==3 || a == 5 || a == 7)
answer ++;
else if( a % 2 == 0 || a % 3 == 0 || a % 5 == 0 || a % 7 == 0)
answer = answer;
else
answer++;
return answer;
}
public static void main(String[] args) {
System.out.println(Solution(4));
}
}
//2,3,5,7로 나눴을 때 != 0 ++
//나눴을 떄 == 0 ==
//13<=x<=26
//13,17,19,23
// 4~8
// 5,7
연습문제 3번 (https://www.acmicpc.net/problem/2869)
public class Solution1_3 {
public static int Solution(int a, int b, int v ){
int answer = 0;
while(true) {
v -= a;
answer++;
if (v <= 0) {
// 만약 break가 된다면, 그 이후의 부분은 실행되지 않음.
break;
}
v += b;
}
return answer;
}
public static void main(String[] args) {
System.out.println(Solution(2, 1, 5));
}
}
/*
v = 총 미터
a = 올라간 거리
b = 떨어지는 거리
단 정상에 도착 시 떨어지지 않음
*/
/*
if( x+a != v)
v += b;
else
*/
/*
i = 0
while True: # 무한 루프
v -= a ; # 하루에 남은 높이를 구함.
answer++; #하루가 지남
if v <= 0: # v가 0보다 작거나 같아지면
break; # 반복문을 끝냄
v += b;
a는 낮동안 올라가는 거리
b는 밤동안 미끄러진 거리
v는 총 높이
올라간 거리 += a
*/
연습문제 4번 (https://www.acmicpc.net/problem/10250)
이 문제는 오늘 풀려 했지만 실패했다.
import java.util.*;
public class Solution1_4 {
public static void Solution( int n, int h , int w){
int answer = 0;
int index = 1;
int[][] arr = new int[h][w];
int i =0, j = 0;
String str = "";
for(i = 0; i< w; i ++){
for(j = 0; j < h; j ++) {
arr[j][i] = index;
index++;
}
}
for(i = 0; i < w; i ++){
for(j = 0; j < h; j++) {
if (arr[j][i] + 1 == n) {
str = "" + (j + 1) + "" + (i + 1);
}
}
}
System.out.println(str);
return ;
}
public static void main(String[] args) {
Solution(16 ,8, 12);
}
}
/*
반복문으로
높이를 먼저 돌리고
길이를 돌리자.
h= 6
w= 12
n= 13
answer = 103
601 602 603 604 605 ...
501 502 503 504 505 ...
401 402 403 404 405 ...
301(3) 302 303 304 305 ...
201(2) 202 203 204 205 ...
101(1) 102 103 104 105 ...
*/
/*
n번째 손님은
1 번째 손님은 101
2 201
3 301
4 401
5 102
6 202
7 302
8 402
9 103
10 203
11 303
12 403
H는 호텔의 층 수
W는 각 층의 방 수
N은 몇 번째 손님인가
H = 4 W = 6 N = 5
높이는
*/
연습문제 5번 (https://www.acmicpc.net/problem/1929)
public class Solution1_5 {
public static void main(String[] args) {
int m = 3;
int n = 16;
for(int i = m; i < n; i++)
if( i==2 || i ==3 || i == 5 || i == 7 ){
System.out.println(i);
}else if( i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0)
System.out.println(i);
}
}
/*
public static void getPrime(int num) {
int i = 2; // i : 나눌 대상
boolean isPrime = true;
while (i <= num) {
isPrime = true;
for (int n = 2; n < i; n++) {
if (i % n == 0) {
isPrime = false;
break;
}
continue;
}
if (isPrime == true)
System.out.println(i);
i++;
}
}
*/