Codeup : 기초 100제(1053 ~ 1083)

Java : codeup 기초 100제 (1053~1083)

codeup 기초 100제 저의 문제풀이 입니다. 기존의 문제를 조금만 수정하면 되는 문제들은 생략하였습니다.

혹시 더 좋은 방법 알려주신다면 정말 감사하겠습니다!

1053

1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때 반대로 출력하는 프로그램을 작성해보자.

정수 1개가 입력된다.(단, 0 또는 1 만 입력된다.)

1	// 1(true)을 입력하면
0	// 0(false)가 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			String strNums = br.readLine();
			
			int num = Integer.parseInt(strNums);
			
			if (num != 1 && num != 0)
				return;
			// 입력된 숫자가 1이나 0이 아니면 종료되게 합니다.
			num = Math.abs(num - 1);
			// java에서는 %d를 이용해 정수형에 '!'를 사용할 수 없습니다.
			// 그렇기 때문에 boolean으로 형변환 후 '!' 사용한 다음 다시 Integer로 변환 후 출력하는 방법이 있는데
			// 이 방법은 작업이 많아 질 거 같아 num에서 1을 빼고 절댓값을 이용해 '!'의 역할을 해주었습니다.
			// ex) abs(1 - 1) = 0 / abs(0 - 1) = 1
			
			bw.write(Integer.toString(num));
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1054

두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.

1 또는 0의 값만 가지는 2개의 정수가 공백을 두고 입력된다.

1 1	// 1(true), 1(true)가 입력되면
1	// 1(true)가 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			String strNums = br.readLine();
			StringTokenizer stk = new StringTokenizer(strNums);
			List<Boolean> nums = new ArrayList<Boolean>();
			
			while(stk.hasMoreTokens())
			{
				int intNum = Integer.parseInt(stk.nextToken());
				
				if (intNum != 1 && intNum!= 0)
					return;
				
				boolean num = intNum != 0;
				// java는 boolean에 true를 입력하지 않으면 전부 false로 받아 들이는 것 같습니다.
				// 그렇기 때문에 문자열에서 boolean으로 바로 변환하지 않고 정수형으로 변환 후 (1 != 0)의 결과 true false를 이용해 boolean에 값을 넣습니다.
				nums.add(num);
			}
				
			int result;
			if (nums.get(0) && nums.get(1))
				result = 1;
			else
				result = 0;
			
			bw.write(Integer.toString(result));
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1064

입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자. 단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.

3 -1 5	// 3개의 값이 입력되면
-1		// 제일 작은 값이 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			String strNums = br.readLine();
			StringTokenizer stk = new StringTokenizer(strNums);
			List<Integer> nums = new ArrayList<Integer>();
			
			while(stk.hasMoreTokens())
			{
				int num = Integer.parseInt(stk.nextToken());
				
				nums.add(num);
			}
				
			int firstSmallNum = nums.get(0) > nums.get(1) ? nums.get(1) : nums.get(0);
			// 0번 값과 1번 값을 비교해서 더 작은 값을 가져옵니다.
			int result = firstSmallNum > nums.get(2) ? nums.get(2) : firstSmallNum;
			// 위에 비교한 더 작은값과 2번 숫자를 비교해서 제일 작은 값을 가져옵니다.
			
			bw.write(Integer.toString(result));
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1065

세 정수 a, b, c가 입력되었을 때, 짝수만 출력해보자.

1 2 4	// 3개의 정수가 입력되면
2
4		// 짝수만 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			String strNums = br.readLine();
			StringTokenizer stk = new StringTokenizer(strNums);
			List<Integer> nums = new ArrayList<Integer>();
			
			while(stk.hasMoreTokens())
			{
				int num = Integer.parseInt(stk.nextToken());
				if (num % 2 == 0)
					nums.add(num);
				// 짝수 값만 리스트에 넣어줍니다.
			}
				
			for (int num : nums)
			{
				bw.write(Integer.toString(num));
				bw.write("\r\n");
			}
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1069

평가를 문자(A, B, C, D, …)로 입력받아 내용을 다르게 출력해보자.

평가 내용 평가 : 내용 A : best!!! B : good!! C : run! D : slowly~ 나머지 문자들 : what?

A	// 영문자 1개가 입력되면
best!!	// 알맞은 평가 내용이 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			char alphabet = br.readLine().toUpperCase().charAt(0);
			// 소문자가 들어오면 대문자로 바꿔서 인식할 수 있게 했습니다.

			switch (alphabet) {
			// 스위치에는 byte, short, char(ASCII로 변경), int 처럼 정수형만 올 수 있습니다. 
			case 'A':
				bw.write("best!!!");
				break;
			case 'B':
				bw.write("good!!");
				break;
			case 'C':
				bw.write("run!");
				break;
			case 'D':
				bw.write("slowly~");
				break;
			default:
				bw.write("what?");
				break;
			}
			
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1071

정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.

0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다.

7 4 2 3 0 1 5 6 9 10 8	// 여러개의 정수가 입력되면
7
4
2
3	// 0이 나오기 전까지 줄을 바꿔 출력합니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;


public class Main {
	
	static InputStreamReader isr = new InputStreamReader(System.in);
	static BufferedReader br = new BufferedReader(isr);
	
	static OutputStreamWriter osw = new OutputStreamWriter(System.out);
	static BufferedWriter bw = new BufferedWriter(osw);
	// printNum() 함수에서 출력을 하기위해 class의 속성으로 주었습니다.
	// static main에서 사용할 변수나 함수에는 static을 붙여주어야 합니다.
	
	// StringTokenizer 객체를 받아 값이 있는지 확인 후, 정수로 바꾸고 0이 아닐 시 출력해주고 다시 printNum()함수를 부르는 재귀함수입니다. (0이 나올 때 까지 출력)
	public static void printNum(StringTokenizer stk) throws Exception {
		// BufferedReader나 Writer를 사용할 땐 반드시 예외처리를 해주어야 하는데 throws를 이용해 함수를 호출하는 곳에서 예외처리를 하게 해주었습니다.
		int num = 0;
		if(stk.hasMoreTokens())
			num = Integer.parseInt(stk.nextToken());

		if (num != 0)
		{
			bw.write(Integer.toString(num));
			bw.write("\r\n");
			printNum(stk);
		}			
	}
	
	public static void main(String[] args) {
		
		try {
			String strnums = br.readLine();
			StringTokenizer stk = new StringTokenizer(strnums);
			// 받은 정수들을 공백(default)을 기준으로 나누어줍니다.
			
			printNum(stk);				
									
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1072

n개의 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 n의 최대 개수는 알 수 없다.

첫 줄에 정수의 개수 n이 입력되고, 두 번째 줄에 n개의 정수가 공백을 두고 입력된다.

5	// 첫 줄에 정수의 개수를 정해주고
1 2 3 4 5	// 두 번째 줄에 정해준 개수 만큼 입력하면
1
2
3
4
5	// 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;


public class Main {
		
	static OutputStreamWriter osw = new OutputStreamWriter(System.out);
	static BufferedWriter bw = new BufferedWriter(osw);
	static StringTokenizer stk;
	// 어디서나 사용할 수 있게 static으로 주었습니다.
	
	// 입력할 정수 개수와,입력받은 문자를 인자로 받고 입력받은 문자를 쪼갠 갯수와 입력한 정수개수를 체크해 주고 출력해주는 함수 
	public static void printNum(int count, String nums) throws Exception {
		stk = new StringTokenizer(nums);
		
		if (stk.countTokens() > count)	//입력한 숫자가 count보다 많으면 함수를 종료합니다. 
			return;
		
		while(stk.hasMoreTokens())	// 출력하는 부분
		{
			int num = Integer.parseInt(stk.nextToken());
			bw.write(Integer.toString(num));
			bw.newLine();
		}
	}
	
	public static void main(String[] args) {
		
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		try {
			int count = Integer.parseInt(br.readLine().trim());
			// 혹시 모를 공백을 제거 해주면서 정수를 입력 받습니다.
			String nums = br.readLine();
			
			printNum(count, nums);				
							
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1081

1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때 나올 수 있는 모든 경우를 출력해보자.

주사위 2개의 면의 개수 n, m이 공백을 두고 입력된다. 단, n, m은 10이하의 자연수

2 3		// 두 개의 정수가 입력되면
1 1
1 2
1 3
2 1
2 2
2 3		// 그 두개의 수로 조합할 수 있는 모든 경우의 수가 나옵니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			String nums = br.readLine().trim();
			StringTokenizer stk = new StringTokenizer(nums);

			if(stk.countTokens() != 2)
				return;
			// 두 개의 숫자만 입력받아야 하기 때문에 나누어진 문자가 2개가 아니면 프로그램을 종료합니다.
			
			int firstNum = Integer.parseInt(stk.nextToken());
            
            if (firstNum > 10)
				return;
            
			int secondNum = Integer.parseInt(stk.nextToken());
            
            if (secondNum > 10)
				return;
			// 나누어진 숫자가 2개인 경우에만 실행되게 했으므로 hasMoreTokens로 체크하지 않아도 됩니다.
			
			for (int i = 1; i <= firstNum; ++i) {
				for (int j = 1; j <= secondNum ; ++j) {
					bw.write(Integer.toString(i) + " " + Integer.toString(j));
					bw.newLine();
				}
			}
			// 두 숫자가 조합되는 경우의 수를 출력해줍니다.
					
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1082

16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운 영일(01)이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.

A, B, C, D, E, F 중 하나가 입력될 때, 1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자. (단, A ~ F 까지만 입력된다.)

B	// A ~ F까지의 16진수가 입력되면
B*1=B
B*2=16
B*3=21
B*4=2C
B*5=37
B*6=42
B*7=4D
B*8=58
B*9=63
B*A=6E
B*B=79
B*C=84
B*D=8F
B*E=9A
B*F=A5	// 결과가 16진수로 출력되는 16진수 구구단(?)이 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			int hexNum = Integer.valueOf(br.readLine().trim(),16);
			// 16진수를 10진수로 바꿔서 저장해줍니다.
            
			if(hexNum < 10)
				return;
			// A ~ F까지 입력이므로 10(A)보다 작으면 프로그램을 종료합니다.
			
			for (int i = 1; i < 16 ; ++i) {
				int result = hexNum * i;
				bw.write(Integer.toHexString(hexNum).toUpperCase() + "*");
				bw.write(Integer.toHexString(i).toUpperCase() + "=");
				bw.write(Integer.toHexString(result).toUpperCase());
				bw.newLine();
			}
            // 10진수로 계산을 한 후 16진수로 출력해줍니다. 
			
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

1083

3 6 9 게임을 하던 영일이는 3 6 9 게임에서 잦은 실수로 계속해서 벌칙을 받게 되었다. 3 6 9 게임의 왕이 되기 위한 마스터 프로그램을 작성해 보자.

10 보다 작은 정수 1개가 입력된다. (1 ~ 9)

9	// 정수를 입력하면
1 2 X 4 5 X 7 8 X	// 3,6,9가 포함된 숫자는 X로 나오면서 출력됩니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	
	// 숫자를 받아서 그 숫자에 3,6,9(박수를 칠 숫자)가 몇번 들어 갔는지 찾아주는 함수입니다. 
	public static int clapNum(int num) {
		// 몇 번의 박수가 나오는 지 저장할 변수입니다.
		int clapNum = 0;
	
		// num이 0일 때 까지 반복합니다.
		while(num != 0)
		{
			// 10의 나머지 연산을 이용해 1의 자리수가 3,6,9면 박수개수를 늘려줍니다. 
			if(num % 10 == 3 ||
					num % 10 == 6 ||
					 num % 10 == 9) {
					++clapNum;				
			}
			
			// 원래의 숫자를 10씩 나눠주어서 한 자리씩 줄입니다.
			// ex) 3456/10=345, 345/10=34, 34/10= 3
			num /= 10;
		}
				
		return clapNum;
	}
	
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			int num = Integer.parseInt(br.readLine().trim());
			// 숫자가 1~9 범위에서 벗어나면 프로그램을 종료합니다.
			if(num < 1 || num > 9)
				return;
			
			for (int i = 1; i <= num; ++i) {
				// 박수의 개수를 구하는 함수를 이용해 박수의 개수를 구합니다.
				int clapNum = clapNum(i);
				
				// 박수의 개수가 0이면 그냥 숫자를 출력해주고 0이 아니면 박수의 개수만큼 X를 출력해줍니다.
				if (clapNum == 0)
					bw.write(Integer.toString(i));
				else {
					for (int j = 1; j <= clapNum; ++j) {
						bw.write('X');
					}
				}
				bw.write(" ");
			}	
			
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

해당 코드들과 사이의 포스팅하지 않은 코드들은 저의 GitHub에서 확인할 수 있습니다.

댓글남기기