컴공댕이 공부일지
230320 EC.crew 4기 2주차 정모 (★백준 1004 어린왕자) 본문
본격적으로 하는 첫 정모라 힐링힐링한 문제들.. 히히 :)
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을 더한다.
'기록 > EC.crew 정기 모임 정리' 카테고리의 다른 글
[ java를 자바라 ] static / 싱글톤 패턴 / final (0) | 2023.05.08 |
---|---|
230327 EC.crew 4기 3주차 정모 (★2579 계단 오르기) (0) | 2023.03.27 |
221117 EC.crew : 스택과 큐 (0) | 2022.11.18 |
221110 EC.crew : 그리디 알고리즘 (0) | 2022.11.10 |
221103 EC.crew : 구간 합 부분 합 (0) | 2022.11.05 |