반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 수학1 중 달팽이는 올라가고 싶다 ( 문제 번호 : 2869 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

해당 문제는 순서를 파악하면 금방 풀 수 있기 때문에 순서와 홀수/짝수 라인 변화되는 공식을 파악하면 

더 빨리 푸실 수 있을거에요.

 

[ 홀수 라인 ]

1번 : 1/1

 

[ 짝수 라인 ]
2번 : 1/2 
3 : 2/1


[ 홀수 라인 ]
4 : 3/1
5 : 2/2
6 : 1/3

 

[ 짝수 라인 ]
7 : 1/4
8 : 2/3
9 : 3/2
10 : 4/1

 

1) JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int x = scan.nextInt();
		scan.close();
		int max = 0;
		int line = 0;
		//줄을 찾아야함
		for(int i=1;i<=x;i++){
			max += i;
			if(max>=x){
				line=i;
				break;
			}
		}
		//짝수는 오른쪽부터
		if(line%2==0){
			System.out.println((line-(max-x))+"/"+(1+max-x));
		}else{
			System.out.println((1+max-x)+"/"+(line-(max-x)));
		}
	}
}

 

2) PYTHON

   파이썬도 위의 자바의 개념으로 풀면 성공!

x = int(input())
line = 0
max = 0
for i in range(1, x+1):
    line = i
    max += i
    if max >= x:
        break

a = line-(max-x)
b = 1+max-x
if line % 2 == 0:
    print(a, '/', b, sep='')
else:
    print(b, '/', a, sep='')

 

여러분도 한번 풀어보세요!

 

 

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 수학1 중 달팽이는 올라가고 싶다 ( 문제 번호 : 2869 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

   하루에 올라갈 미터는 a-b 이고, 몇일이 걸리는지는 x 라고 하고, (a-b)x+a=v

   x = (v-a)/ (a-b)

  이때 +1을 해주는 이유는 다올라간 후엔 내려가지 않는다는 조건이 있음으로 올라간 마지막날을 더해주는 것

  결과적으로 (v-a)%(a-b)의 나머지가 소숫점이 남아있다면 다음날에 한번 더 올라가야함으로 +1을 해줌

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int a = scan.nextInt();
		int b = scan.nextInt();
		int v = scan.nextInt();
		int result = (v-a)/(a-b)+1;
		int today = (v-a)%(a-b) ==0?result:result+1;
		System.out.println(today);
		scan.close();
	}
}

 

2) PYTHON

   파이썬도 위의 자바의 개념으로 풀면 성공!

a, b, v = map(int, input().split())
result = (v-a)//(a-b) + 1
if (v-a) % (a-b) == 0:
    print(result)
else:
    print(result+1)

 

여러분도 한번 풀어보세요!

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 수학1 중 설탕 배달 ( 문제 번호 : 2839 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

이 문제는 21과 8같은 숫자도 한번 예제로 입력해 보는게 좋을거같아요!

 

1) JAVA

import java.io.IOException;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException{
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		scan.close();
		
		//5로 나눴을때 잘되는게 최우선
		if(n%5==0){
			System.out.println(n/5);
		}else{
			//5로 최대한 나눈뒤 3으로 나누어졌을때 가능한거
			int max_num = n/5;
			for(int i=max_num; i>0; i--){
				int calc = n-(5*i);
				if(calc%3==0){
					System.out.println(i+(calc/3));
					return;
				}
			} 
			
			//3으로 최대한 나누는거
			if(n%3==0){
				System.out.println(n/3);
			}else{
				System.out.println(-1);
			}
		}
	}
}

 

2) PYTHON

   * cnt는 3키로의 최소개수를 구하는 count

n = int(input())
if n % 5 == 0:
    print(n//5)
else:
    calc = n//5
    cnt = 0
    result = 0
    while True:
        n -= 3
        cnt += 1
        if n % 5 == 0:
            result = cnt + (n//5)
            break
        if n < 0:
            result = -1
            break
    print(result)

 

여러분도 한번 풀어보세요!

 

반응형
반응형

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 수학1 중 손익분기점 ( 문제 번호 : 1712 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

   시간제한이 0.35초라 런타임에러가 떠서 BufferedReader와 StringTokenizer를 사용했다.

   그리고 A, B, C는 21억 이하의 자연수라고 해서 long으로 처리하였다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class backJoon_1712 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		long a = Integer.parseInt(st.nextToken());
		long b = Integer.parseInt(st.nextToken());
		long c = Integer.parseInt(st.nextToken());
		br.close();
		
		if(c <= b){
			System.out.println(-1);
		}else{
			System.out.println(a /(c-b) +1);
		}
	}
}

 

2) PYTHON

a, b, c = list(map(int, input().split()))
if b >= c:
    print(-1)
else:
    print((a // (c-b))+1)

 

여러분도 한번 풀어보세요!

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 문자열 중 크로아티아 그룹 단어 체커 ( 문제 번호 : 1316 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int count = Integer.parseInt(br.readLine());
		int result = count;
		for(int i=0; i<count; i++){
			String words = br.readLine();
			String prev = String.valueOf(words.charAt(0));
			ArrayList<String> list = new ArrayList<String>();
			for(int k=0; k<words.length(); k++){
				String w = String.valueOf(words.charAt(k));			
				if(!prev.equals(w) && list.contains(w)){
					result--;
					break;
				}
				prev = String.valueOf(words.charAt(k));
				list.add(w);
			}
		}
		System.out.println(result);
		br.close();
	}
}

 

2) PYTHON

n = int(input())
result = n
for i in range(n):
    words = input()
    dup = ''
    for j in range(1, len(words)):
        if words[j-1] != words[j] and words[0:j-1].__contains__(words[j]):
            result -= 1
            break
print(result)

 

여러분도 한번 풀어보세요!

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 문자열 중 크로아티아 알파벳 ( 문제 번호 : 2941 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String alphabat = scan.nextLine();
		scan.close();
		String[] c = {"c=","c-","dz=","d-","lj","nj","s=","z="};
		for(int i=0; i<c.length;i++){
			while(alphabat.contains(c[i])){
				alphabat = alphabat.replaceFirst(c[i], " ");
			}
		}
		System.out.println(alphabat.length());
	}

}

 

2) PYTHON

alpha = input()
word = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
for i in word:
    alpha = alpha.replace(i, ' ')
print(alpha.__len__())

 

여러분도 한번 풀어보세요!

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 문자열 중 다이얼 ( 문제 번호 : 5622 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		String num = scan.nextLine();
		scan.close();
		int time = 0;
		
		for(int i=0; i<num.length();i++){
			char text = num.charAt(i);
			if(text >='A' && text <= 'C'){
				time += 3;
			}else if(text >='D' && text <= 'F'){
				time += 4;
			}else if(text >='G' && text <= 'I'){
				time += 5;
			}else if(text >='J' && text <= 'L'){
				time += 6;
			}else if(text >='M' && text <= 'O'){
				time += 7;
			}else if(text >='P' && text <= 'S'){
				time += 8;
			}else if(text >='T' && text <= 'V'){
				time += 9;
			}else{
				time += 10;
			}
		}
		System.out.println(time);
	}
}

 

2) PYTHON

    * 알파벳을 숫자 단위로 묶어서 index 번호로 time을 더해준다 0부터 시작하니까 +3으로 한다.

num = input()
alphabet = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
time = 0
for i in range(len(num)):
    for j in alphabet:
        if num[i] in j:
            time += alphabet.index(j)+3
print(time)

 

여러분도 한번 풀어보세요!

 

반응형
반응형

 

안녕하세요 Jin's 입니다.

 

백준 알고리즘의 문자열 중 상수 ( 문제 번호 : 2908 )의 소스입니다.

 

 

Java와 Python 두가지 버전 소스입니다.

 

1) JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String[] number = scan.nextLine().split(" ");
		int[] result = new int[number.length];
		
		for(int i=0; i<number.length; i++){
			String reverse = "";
			for(int j=0; j<number[i].length(); j++){
				reverse += number[i].charAt(number[i].length()-j-1);
			}
			result[i] = Integer.parseInt(reverse);
		}
		
		if(result[0] < result[1]){
			System.out.println(result[1]);
		}else{
			System.out.println(result[0]);
		}
		
		scan.close();
	}
}

 

2) PYTHON

number = input().split()
result = []
for i in range(len(number)):
    reverse = ''
    size = len(number[i])
    for j in range(size):
        reverse += number[i][size-j-1]
    result.append(reverse)
print(max(result))

 

여러분도 한번 풀어보세요!

 

반응형

+ Recent posts