/* 문제설명 */

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE&problemTitle=Flatten&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

로그인을 해야만 볼 수 있다.

 

 


 

/* 해답코드 */

package samsung;

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

public class Flatten {
	static int[] boxes = new int[100];
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int ans=0;
		for(int i=0;i<10;i++) {
			int n = Integer.parseInt(br.readLine());
			st = new StringTokenizer(br.readLine());
			for(int j=0;j<100;j++) {
				boxes[j] = Integer.parseInt(st.nextToken());
			}
			
			for(int j=0;j<n;j++) {
				int max = boxes[0];
				int min = boxes[0];
				int maxIdx = 0;
				int minIdx = 0;
				for(int k=0;k<100;k++) {
					if(max<boxes[k]) {
						max=boxes[k];
						maxIdx = k;
					}
						
					if(min>boxes[k]) {
						min=boxes[k];
						minIdx = k;
					}
				}
				boxes[maxIdx]--;
				boxes[minIdx]++;
			}
			
			int max = boxes[0];
			int min = boxes[0];
			for(int k=0;k<100;k++) {
				if(max<boxes[k]) {
					max=boxes[k];
				}
					
				if(min>boxes[k]) {
					min=boxes[k];
				}
			}
			ans = max - min;
			System.out.printf("#%d %d\n",i+1,ans);
			
		}
	}
}

'Coding Test > SWEA' 카테고리의 다른 글

[SWEA][1251]하나로  (0) 2021.08.25
[SWEA]Ladder1  (0) 2021.08.05

/* 문제설명 */

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh&categoryId=AV14ABYKADACFAYh&categoryType=CODE&problemTitle=Ladder&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

로그인을 해야만 볼 수 있다.

 

 

 

 


 

 

 

/* 재귀함수 */

 

 

반복되는 부분 >> 만약 왼쪽이나 오른쪽에 길이 있다면, 길이 이어진 곳까지 진행

                        위로 한 칸 이동

                         


 

/* 해답코드 */

package samsung;

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

public class Ladder1 {
	static int start;
	static int[][] ladder = new int[100][100];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int dst = 0;
		for(int i=0;i<10;i++) {
			
			//입력받기
			br.readLine();	
			int x,y;
			for(x=0;x<100;x++) {
				st = new StringTokenizer(br.readLine()," ");
				for(y=0;y<100;y++) {
					ladder[x][y] = Integer.parseInt(st.nextToken());
					if(ladder[x][y]==2) {
						dst = y;
					}
				}
			}
			
			goNextFloor(99,dst);
			System.out.printf("#%d %d\n",i+1,start);
		}
		
	}

	public static void goNextFloor(int x,int y) {
		//기저조건!
		if(x==0) {
			start = y;
			return;
		}
		
		//양옆조사
		if(y-1>=0 && ladder[x][y-1]==1) {
			while(y-1>=0 && ladder[x][y-1]==1) {
				y--;
			}
		}else if(y+1<100 && ladder[x][y+1]==1) {
			while(y+1<100 && ladder[x][y+1]==1) {
				y++;
			}
		}	
		
		//다음 층으로 출발!
		goNextFloor(x-1,y);
	}
}

'Coding Test > SWEA' 카테고리의 다른 글

[SWEA][1251]하나로  (0) 2021.08.25
[SWEA]Flatten  (0) 2021.08.05

/* 문제설명 */

 

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.

아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.

아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

입력

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

출력

일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

 

 

 


 

 

 

/* 조합 */

 

난쟁이의 키가 100을 넘지 않는다는 점을 이용해서 일곱 난쟁이가 아닌 친구들을 101로 지정하고 

추후 오름차순 정렬에서 자연스레 맨뒤로 빠지게 하였다.

 

 

 


 

/* 해답코드 */

package baekjoon;

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

public class b2309{

	private static int[] nan;
	static int sum=0;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		nan = new int[9];
		for(int i=0;i<9;i++) {
			nan[i] = Integer.parseInt(br.readLine());
			sum+=nan[i];
		}

		outer:for(int i=0;i<9;i++) {
			for(int j=i+1;j<9;j++) {
				if((sum-nan[i]-nan[j])==100) {
					nan[i]=101;
					nan[j]=101;
					break outer;
				}
			}
		}
		
		Arrays.sort(nan);
		for(int i=0;i<7;i++) {
			System.out.println(nan[i]);
		}

	}

	
}

 

 

 

 

 

 

(+) 다음주 부터는 속도를 줄이기 위해 bufferedWriter에 대해 공부하고 적용해보도록 하자.

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준]경비원  (0) 2021.08.07
[백준]색종이  (0) 2021.08.07
[백준]수열  (0) 2021.08.07
[백준]재귀함수가 뭔가요?  (0) 2021.08.03
[백준]하노이 탑  (0) 2021.08.03

/* 문제설명 */

 

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다.

매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대학교가 자신과 맞는가에 대한 고민을 항상 해왔다.

중앙대학교와 자신의 길이 맞지 않다고 생각한 JH 교수님은 결국 중앙대학교를 떠나기로 결정하였다.

떠나기 전까지도 제자들을 생각하셨던 JH 교수님은 재귀함수가 무엇인지 물어보는 학생들을 위한 작은 선물로 자동 응답 챗봇을 준비하기로 했다.

JH 교수님이 만들 챗봇의 응답을 출력하는 프로그램을 만들어보자.

 

입력

교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.

출력

출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.

 


 

/* 재귀 함수 */

"어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." >> 처음에 한번만 출력

 

<재귀의 시작>

"재귀함수가 뭔가요?" 

if

"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.

마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.

그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."

else

"재귀함수는 자기 자신을 호출하는 함수라네"

 

<재귀의 마무리>

라고 답변하였지.

 

어떤 부분이 어느 부분에 나와야 하는지 침착하게 보면 풀 수 있다.

 


 

/* 해답코드 */

package baekjoon;
import java.util.Scanner;

public class b17478 {
	static int cnt=0;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		cnt = sc.nextInt();
		System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
		askHim(0,"");
		
		sc.close();
	}
	
	static void askHim(int n,String line) {
		if(cnt>n) {
			System.out.println(line + "\"재귀함수가 뭔가요?\"");
			System.out.println(line + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
			System.out.println(line + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
			System.out.println(line + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
			askHim(n+1,line+"____");
		}else {
			System.out.println(line + "\"재귀함수가 뭔가요?\"");
			System.out.println(line + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
		}
		System.out.println(line + "라고 답변하였지.");
		return;
	}
}

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준]경비원  (0) 2021.08.07
[백준]색종이  (0) 2021.08.07
[백준]수열  (0) 2021.08.07
[백준]일곱난쟁이  (0) 2021.08.04
[백준]하노이 탑  (0) 2021.08.03

/* 문제설명 */

 

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.

  1. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다.
  2. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다.

이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.

아래 그림은 원판이 5개인 경우의 예시이다.

입력

첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 100)이 주어진다.

 

출력

첫째 줄에 옮긴 횟수 K를 출력한다.

N이 20 이하인 입력에 대해서는 두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다. N이 20보다 큰 경우에는 과정은 출력할 필요가 없다.


 

/* 재귀 함수 */

 

" flat하게 생각하자 "

하나의 디스크 입장에서

- (전체 디스크 개수 - 1)만큼 들어서 시작 막대기에서 임시 막대기로 놓고,

- 해당 디스크를 목적지로 옮기고,

- (전체 디스크 개수 - 1)만큼 들어서 임시 막대기에서 목적지로 옮긴다.

 

 

 


 

/* 해답코드 */

package baekjoon;

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


//하노이 탑
public class b11729 {
	static int cnt = 0;
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int disk = Integer.parseInt(bf.readLine());
		move(disk,1,2,3);
		System.out.println(cnt);
		System.out.println(sb);
	}
	public static void move(int disk,int start, int temp, int dstn) {
		if(disk==0) return;
		cnt++;
		move(disk-1,start,dstn,temp);
		sb.append(start+" "+dstn+"\n");
		move(disk-1,temp,start,dstn);
	}
	
}

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준]경비원  (0) 2021.08.07
[백준]색종이  (0) 2021.08.07
[백준]수열  (0) 2021.08.07
[백준]일곱난쟁이  (0) 2021.08.04
[백준]재귀함수가 뭔가요?  (0) 2021.08.03

/* 문제설명 */

 

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.

 

  1. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
  2. 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
  3. 첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
  4. 두 번째(1번), 세 번째(2번) 폰켓몬을 선택
  5. 두 번째(1번), 네 번째(3번) 폰켓몬을 선택
  6. 세 번째(2번), 네 번째(3번) 폰켓몬을 선택

이때, 첫 번째(3번) 폰켓몬과 네 번째(3번) 폰켓몬을 선택하는 방법은 한 종류(3번 폰켓몬 두 마리)의 폰켓몬만 가질 수 있지만, 다른 방법들은 모두 두 종류의 폰켓몬을 가질 수 있습니다. 따라서 위 예시에서 가질 수 있는 폰켓몬 종류 수의 최댓값은 2가 됩니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를

완성해주세요.

 

 


 

/* vector에서 중복제거 */

일단 include

#include<algorithm>

sort 후 unique 후 erase

unique는 중복되는 것들을 맨 뒤로 가져다 놓고, unique의 리턴 값은 중복되는 것들이 시작되는 부분이기 때문에

erase로 그 부분을 삭제하는 것이다.

sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(),nums.end()),nums.end());

 


/* 해답코드 */

#include <vector>
#include<algorithm>
using namespace std;

int solution(vector<int> nums)
{
    int before = nums.size()/2;
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()),nums.end());
    int after = nums.size();
    if(before<after)
        return before;
    else
        return after;
}

+ Recent posts