- 22-01-12 푼 문제 수 : 7개
3052번 나머지 : boolean
이 문제는 다소 오해할 수 있게 작성하신 것 같다, 주어진 숫자를 42로 나눈 나머지 중 서로 다른 값이 몇개 있는지 출력해야하는데, 나는 처음에 이렇게 이해했다. 예를 들어 나머지가 이렇게 나오면(39, 40, 41, 0, 1, 2, 40, 41, 0, 1) 40, 41, 0, 1 은 중복되니 39, 2만 서로 다른 값이 된다는 식으로... 뭐 예제를 제대로 봤다면 금방 이상함을 알아차렸을 텐데.ㅠ 실제 답은 서로 다른 값은 (39, 40, 41, 0, 1)로 6개이다.
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int num[] = new int[10];
boolean result[] = new boolean[42]; // 나머지 0~41 의 경우
for(int i=0; i<10; i++) {
String line = in.readLine();
result[Integer.parseInt(line) % 42] = true;
}
int cnt=0;
for(boolean k : result) {
if(k) {
cnt++;
}
}
out.write(cnt+"\n");
in.close();
out.flush();
out.close();
}
- boolean 배열의 default 값은 false이다.
- 위 방법은 배열을 이용해서 내가 푼 거고, 찾아보니 hashSet을 이용해서 풀 수도 있다고 한다. [https://st-lab.tistory.com/46]
4344번 평균은 넘겠지
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(in.readLine()); //테스트 케이스 수
int n;
int grade[] = null;
for(int i=0; i<t; i++) {
String line = in.readLine();
StringTokenizer st = new StringTokenizer(line);
n = Integer.parseInt(st.nextToken());//학생 수
grade = new int[n];
for(int j=0; j<n; j++) {
grade[j] = Integer.parseInt(st.nextToken());
}
int avr = 0;
for(int g : grade) {
avr += g;
}
avr = avr/n; //평균
//평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력
double cnt = 0;
for(int g2 : grade) {
if(g2 > avr) {
cnt++;
}
}
String str = String.format("%.3f",cnt/n*100);
out.write(str +"% \n");
}
in.close();
out.flush();
out.close();
}
- 반올림하여 소수점 셋째자리까지 출력하기
double n = 40.000; System.out.println(Math.round(money*1000)/1000); //결과 40, ※소수점 아래가 0일 경우 제거함 System.out.println(String.format("%.3f", money)); //결과 : 40.000
- 백분율 나타내는 법 : 해당 값 / 전체 값 *100
4673번 셀프 넘버
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
boolean selfnum[] = new boolean[10001];
for(int i=1; i<selfnum.length; i++) {
int result = d(i);
if(result <10001) {
selfnum[result] = true; //생성자를 갖는 값은 1 처리
}
}
for(int i=1; i<selfnum.length; i++) {
if(selfnum[i] == false) {
out.write(i + "\n");
}
}
out.flush();
out.close();
}
public static int d(int n) {
int result = n;
while(n!=0) {
result += n % 10;
n = n / 10;
}
return result;
}
[https://st-lab.tistory.com/53] 이 블로그가 푼 것 처럼 혼자 풀었었는데, 아이디어는 같았지만 수식이 잘못써서 틀렸다가 수정했다..ㅠㅠ
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 11719번 그대로 출력하기 2 (0) | 2022.01.28 |
---|---|
[PS] 백준 단계별로 풀기 - 10757번 큰 수 A+B (0) | 2022.01.24 |
[PS] 백준 단계별로 풀기 - 1차원 배열 (0) | 2022.01.12 |
[PS] 백준 단계별로 풀기 - 입출력, If문 (0) | 2022.01.10 |
[PS] 백준 단계별로 풀기 - for문, while문 (0) | 2022.01.10 |