잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

1292번: 쉽게 푸는 문제

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.

www.acmicpc.net

 

 

 

 

 

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] s = br.readLine().split(" ");
		int a = Integer.parseInt(s[0]);
		int b = Integer.parseInt(s[1]);
		
		int result = 0;
		
		int position = 1;
		int number = 1;
		for (int i = 1; i <= b; i++) {
			if (position < i) {
				number++;
				position += number;
			}
			if (i >= a && i <= b) result += number;
		}
		
		System.out.println(result);
	}
}

 

문제 결과 메모리 시간 코드 길이
1292 맞았습니다!! 14160 KB 124 ms 528 B

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

9372번: 상근이의 여행

첫 번째 줄에는 테스트 케이스의 수 T(T ≤ 100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 ≤ N ≤ 1 000)과 비행기의 종류 M(1 ≤ M ≤ 10 000) 가

www.acmicpc.net

 

 

 

 

 

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        //테스트케이스 갯수
		int t = Integer.parseInt(br.readLine());
		
        //테스트케이스만큼 반복
		for (int T = 0; T < t; T++) {
			String[] nm = br.readLine().split(" ");
            
			int n = Integer.parseInt(nm[0]); //국가 수
			int m = Integer.parseInt(nm[1]); //비행기 종류
			
            //m만큼 읽어들이고 끝내기
			for (int i = 0; i < m; i++) {
				br.readLine();
			}
			
            //결론은 n-1임
			bw.write(n-1 + "\n");
		}		
		bw.flush();
		bw.close();
	}
}

 

문제 결과 메모리 시간 코드 길이
9372 맞았습니다!! 24216 236 573

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

11203번: Numbers On a Tree

The only line of input contains the height of the tree H, 1 ≤ H ≤ 30 and a string consisting of the letters ‘L’ and ‘R’, denoting a path in the tree starting in the root. The letter ‘L’ denotes choosing the left child, and the letter ‘R

www.acmicpc.net

 

 

 

 

 

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        //띄어쓰기로 트리의 높이와 루트가 나뉘어져있음
		String[] s = br.readLine().split(" ");
        
        //트리의 높이
		int n = Integer.parseInt(s[0]);
		
        //트리의 높이로 최정점 노드의 번호를 가져올 수 있음
        //이 때, int로 선언할 경우 높이 범위인 30을 계산할 때 int 범위를 초과하여 오류 발생함
		long num = (long) Math.pow(2, n+1) - 1;
		
        //최상위 노드의 위치
		int index = 1;
		
        //s의 길이가 1인 경우에는 루트가 없다는 뜻으로 그냥 리턴해야함
		if (s.length > 1) {
        	//글자 비교가 편하게 char[] 변환
			char[] word = s[1].toCharArray();
            
            //word 방문용 for문
			for (int i = 0; i < word.length; i++) {
				//만약 L이면 현재 위치에서 2만 곱하고, R일 경우에는 2를 곱하고 1을 더해줘야함 
                index = word[i] == 'L' ? index * 2 : index * 2 + 1;
			}
		}
	
    	//리턴할 숫자는 최상위 노드 숫자에서 위치를 빼고 1을 더해주면 됨
		System.out.println(num - index + 1);
	}
}

 

문제 결과 메모리 시간 코드 길이
11203 맞았습니다!! 14308 KB 128 ms 529 B

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

1268번: 임시 반장 정하기

오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.

www.acmicpc.net

 

 

 

 

 

import java.io.*;
import java.util.*;
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());
		int[][] table = new int[n][5];
		boolean[][] list = new boolean[n][n];
		
		for (int i = 0; i < n; i++) {
			String[] s = br.readLine().split(" ");
			for (int j = 0; j < s.length; j++) {
				table[i][j] = Integer.parseInt(s[j]);
			}
		}
		
		//1학년부터 5학년까지 반복
		for (int i = 0; i < 5; i++) {
			//반 수는 9반까지 있으니까 10으로 범위 지정
			ArrayList<Integer>[] temp = new ArrayList[10];

			//학년에 따른 학생 반복 (해당 학년 때 같은 반인 학생들 모으기 위한 for문)
			for (int j = 0; j < n; j++) {
				//만약 j번 학생의 i학년의 반에 대한 array가 없을 때 새로 만들기
				if (temp[table[j][i]] == null) temp[table[j][i]] = new ArrayList<>();
				//array에 j번 추가
				temp[table[j][i]].add(j);
			}
			
			//학년에 따른 학생 반복 (해당 학년 때 같은 반인 학생 체크하기 위한 for문)
			for (int j = 0; j < n; j++) {
				//몇 반이었는지 가져오기
				int num = table[j][i];

				//같은 반 학생들 리스트 가져오기
				ArrayList<Integer> data = temp[num];

				//학생에 따른 같은 반 학생이었던 학생 체크하기 위한 for문
				for (int k = 0; k < data.size(); k++) {
					if (j == data.get(k)) continue;
					list[j][data.get(k)] = true;
				}
			}
		}
		
		int max = 0;
		int index = 0;
		for (int i = 0; i < n; i++) {
			int num = 0;
			for (int j = 0; j < n; j++) {
				if (list[i][j]) num++;
			}
			if (max < num) {
				max = num;
				index = i;
			}
		}
		
		System.out.println(index+1);
	}
}

 

문제 결과 메모리 시간 코드 길이
1268 맞았습니다!! 18732 KB 260 ms 1188 B

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

 

 

 

 

 

import java.io.*;
import java.util.*;
public class Main {
	//완벽한 이진트리가 아니기 때문에 arraylist로는 복잡해질 것 같아서 해시맵을 활용하여 부모노드를 키로, 자식노드를 값으로 설정
	static HashMap<String, Node> tree;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		//줄 수
		int n = Integer.parseInt(br.readLine());
		//tree 초기화
		tree = new HashMap<>();
		
		//for문으로 노드 입력 받기
		for (int i = 0; i < n; i++) {
			String[] s = br.readLine().split(" ");
			//첫 글자는 부모노드, 그 다음은 왼쪽 노드, 오른쪽 노드로 구분되어 그대로 추가
			tree.put(s[0], new Node(s[1], s[2]));
		}

		//전위순회 함수 호출
		System.out.println(preOrder("A"));
		//중위순회 함수 호출
		System.out.println(inOrder("A"));
		//후위순회 함수 호출
		System.out.println(postOrder("A"));
	}
	
	//전위순회
	public static String preOrder(String word) {
		StringBuilder sb = new StringBuilder(word);
		Node node = tree.get(word);

		if (!node.left.equals(".")) sb.append(preOrder(node.left));
		if (!node.right.equals(".")) sb.append(preOrder(node.right));
		
		return sb.toString();
	}
	
	//중위순회
	public static String inOrder(String word) {
		StringBuilder sb = new StringBuilder();
		Node node = tree.get(word);

		if (!node.left.equals(".")) sb.append(inOrder(node.left));
		sb.append(word);
		if (!node.right.equals(".")) sb.append(inOrder(node.right));
		
		return sb.toString();
	}
	
	//후위순회
	public static String postOrder(String word) {
		StringBuilder sb = new StringBuilder();
		Node node = tree.get(word);

		if (!node.left.equals(".")) sb.append(postOrder(node.left));
		if (!node.right.equals(".")) sb.append(postOrder(node.right));
		sb.append(word);
		
		return sb.toString();
	}
}

class Node {
	String left, right;
	public Node(String l, String r) {
		this.left = l;
		this.right = r;
	}
}

 

문제 결과 메모리 시간 코드 길이
1991 맞았습니다!! 14176 KB 128 ms 1519 B

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

1259번: 팰린드롬수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

www.acmicpc.net

 

 

 

 

 

import java.io.*;
public class Main {	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//계속 반복
		while (true) {
			String n = br.readLine();
			
			//입력 받아온 글자가 0일 경우 종료
			if (n.equals("0")) break;
			
			//입력 받은 글자 n을 split으로 String 배열로 만들기
			String[] cut = n.split("");
			
			//제일 앞과 뒤부터 글자를 비교할 예정
			int start = 0;
			int end = cut.length - 1;
			
			//리턴값을 판별하기 위해 체크용 boolean
			boolean value = true;

			//start가 end보다 작을 때까지만 반복
			while (start < end) { 
				//만약 start와 end 위치의 글자가 같지 않으면 value값 바꾸고 종료
				if (!cut[start].equals(cut[end])) {
					value = false;
					break;
				}
				
				//글자가 같으면 start는 한 칸 오른쪽으로 end는 왼쪽으로 이동
				start++;
				end--;
			}
			
			//value 값이 true면 yes를, false면 no를 출력
			if (value) System.out.println("yes"); else System.out.println("no");
		}
	}
}

 

문제 결과 메모리 시간 코드 길이
1259 맞았습니다!! 14152 120 581

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

 

 

 

 

 

import java.io.*;
import java.util.*;
public class Main {	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//만들어야 할 길이
		int X = Integer.parseInt(br.readLine());
	
		//첫 막대기 길이
		int stick = 64;

		//남아있는 막대기 길이
		ArrayList<Integer> all = new ArrayList<>();
		//all 안에 들어있는 막대기 모든 길이
		int allStick = 0;
		
		//while문으로 막대 길이와 남아있는 막대 길이가 X보다 작거나 같아질 때까지 반복
		while (stick + allStick > X) {
			//막대기를 절반으로 자르고
			stick /= 2;
			//절반으로 잘린 막대 길이와 남아있는 막대기 모든 길이의 합이 X보다 작으면
			if (stick + allStick < X) {
				//다른 절반으로 잘린 막대기는 보관
				all.add(stick);
				allStick += stick;
			}
		}
		//stick은 따로 추가해줘야하기 때문에 +1을 해줌
		System.out.println(all.size()+1);
	}
}

 

문제 결과 메모리 시간 코드 길이
1094 맞았습니다!! 14328 KB 128 ms 503 B

 

 

 

 

 

 

728x90
728x90

 

 

 

 

피벗 테이블 문제를 풀다가 만난 문제

 

'연구원ID'가 'ANS-07'인 연구원의 '광자통신' 데이터만 별도 시트에 작성하시오(시트명을 '광자통신연구원'으로 지정하고, '기출5' 시트 앞에 위치시킴).

 

 

 

 

 

 

 

 

해설을 봐도 설명이 제대로 나오지 않아서 어떻게 해야할지 몰랐는데 알고 보면 엄청 쉬운 문제였다..

 

 

 

 

 

'연구원ID'가 'ANS-07'인 연구원의 '광자통신' 데이터를 추출하는 문제이기 때문에

 

 

ANS-07과 광자통신의 접점인 부분을 더블클릭하면 새로운 시트가 생긴다.

 

 

 

 

 

 

 

 

 

 

그리고 시트 이름만 바꾸면 된다.

 

 

 

 

 

728x90

+ Recent posts