컴공댕이 공부일지

230320 EC.crew 4기 2주차 정모 (★백준 1004 어린왕자) 본문

기록/EC.crew 정기 모임 정리

230320 EC.crew 4기 2주차 정모 (★백준 1004 어린왕자)

은솜솜솜 2023. 3. 20. 19:18
728x90

본격적으로 하는 첫 정모라 힐링힐링한 문제들.. 히히 :)

 

1. 9398번 합 / 해결

브론즈 5

https://www.acmicpc.net/problem/8393

 

8393번: 합

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

www.acmicpc.net

그냥 단순히 n까지의 합을 구하는 문제.

 

 

정답 코드 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n=s.nextInt();
		int sum=0;
		
		while(n>=0) {
			sum+=n;
			n--;
		}
		
		System.out.println(sum);
	}
}

 

 

 

 

2. while문을 사용해 1부터 1000까지의 자연수 중 3의 배수의 합을 구해보기 / 해결

 

정답 코드 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n=1;
		int sum=0;
		
		while(n<=1000) {
			if(n%3==0) {
				sum+=n;
			}
			n++;
		}
		
		System.out.println(sum); //정답 166833
	}
}

 

 

 

 

3. 11653번 소인수분해 / 해결

브론즈 1

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

 

 

정답 코드 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n=sc.nextInt();
		int k=2;
		
		while(n!=1) {
			if(n%k==0) {
				System.out.println(k);
				n/=k;
			} else {
				k++;
			}
			
		}
	}
}

 

 

 

오늘 정모 베스트 문제! 젤 어려웠거덩 ㅎㅅㅎ

백준에서 기하학 문제는 처음!

4. 1004번 어린왕자 / 해결

실버 3

https://www.acmicpc.net/problem/1004

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주

www.acmicpc.net

 

문제는 금방 풀었는데 테스트 케이스 여러개로 만드는 게 한참 걸렸다...

그냥 그때그때 변수로 받고 계산해놓고 저장하면 되는데 한번에 2차원 배열써서 다 받으려는 이상한 짓을 했다...! 바부.

 

정답 코드

import java.util.Scanner;
public class Main {
	public static void main (String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int t=sc.nextInt();
		int [] result = new int[t];
		int n=0;
        
		int x1=0; //출발 도착 좌표
		int x2=0;
		int y1=0;
		int y2=0;
        
		int starNum=0; //행성수
        
		int x=0; //행성 좌표, 반지름
		int y=0;
		int r=0;
		
		
		while(n!=t){
			result[n]=0; //다음 테스트케이스 돌 땐, 결과값 배열 초기화
			
			x1=sc.nextInt();
			y1=sc.nextInt();
			x2=sc.nextInt();
			y2=sc.nextInt();
			
			starNum=sc.nextInt();
			
			for(int i=0; i<starNum; i++) {

				int count=0;
				x=sc.nextInt();
				y=sc.nextInt();
				r=sc.nextInt();
				
				int dStart=(x1-x)*(x1-x)+(y1-y)*(y1-y);
				int dEnd=(x2-x)*(x2-x)+(y2-y)*(y2-y);
				
						
				if(r*r>dStart) { //출발지가 행성 안에 포함
					count++;	
				}
				
				if(r*r>dEnd) { //출발지가 행성 안에 포함
					count++;
				}
				
				
				if(count==1) { //출발 도착 한 곳만 포함이라면
					result[n]++;
				}
				
			}
			
			n++;
		}
		
		
		
		for(int i=0; i<t; i++) { 
			System.out.println(result[i]);
		}
		
		
	}

}

풀이 :

 

출발 도착지가 행성 안에 포함되어 있는지 아닌지를 계산!

포함했다면 count++;

 

출발점과의 거리, 도착점과의 거리와 행성의 반지름을 비교해 포함 관계를 구한다.

 

출발 도착지 둘 다 행성 내에 포함or 불포함이면, 진입/이탈이 불필요하지만,

둘 중 딱 한 곳 만 포함되어있다면 진입/이탈이 필요하므로 최종 result값에 1을 더한다.

 

풀이 한 장 요약

728x90
Comments