728x90
https://www.acmicpc.net/problem/7568
//1. 사람수 입력받기
//2. 사람수 만큼 키 몸무게 입력받기
//3. 키 몸무게 공백으로 split하기
//4. split된 키 몸무개 객체로 만들어서 array로 만들기
//5. array들 객체 각각 자신보다 몸무게&&키 큰 객체의 수 세서 result array에 넣기
//6. 출력
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//1. 사람수 입력받기
int N = sc.nextInt();
sc.nextLine();
Info[] infos = new Info[N];
for(int i=0;i<N;i++){
//2. 사람수 만큼 키 몸무게 입력받기
String infoText=sc.nextLine();
//3. 키 몸무게 공백으로 split하기
String[] infoTexts = infoText.split(" ");
//4. split된 키 몸무개 객체로 만들어서 array로 만들기
infos[i]=new Info(Integer.parseInt(infoTexts[0]),Integer.parseInt(infoTexts[1]));
}
//등수 출력
int cnt=0;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(infos[i].getWeight()<=infos[j].getWeight()
&& infos[i].getHeight()<=infos[j].getHeight()){
cnt++;
}
}
int rank = cnt;
System.out.print(rank+" ");
cnt=0;
}
}
}
class Info{
private int weight;
private int height;
Info(int weight,int height){
this.weight = weight;
this.height = height;
}
int getWeight(){
return this.weight;
}
int getHeight(){
return this.height;
}
}
클래스 만들어서 풀어보고싶어서 해봤는데 계속 틀렸대 ㅡㅡ
답은 잘만 나오는데 왜저러는거임?
혹시 프린트할때 공백이 문젠가 싶어서 배열에 넣어서 반복문 해봤는데도 안됨.
뭐가 틀렸다는건지 모르겠음
그래서 일단 2중배열로 풀고 때려치움;
+++
아 알았음
뭐가 틀렸는지
여기가 틀림. 나는 나중에 +1하지말고 그냥 자기자신 만나도 1을 추가해라는 생각으로 저렇게 했는데
자기자신이랑 같은 데이터가 있을 수 있다는 것을 간과해버림.;;;
저걸 < 로 바꾸고 나중에 rank에 +1을 해주니 잘됨 ㅜㅜ 젠즈앙
고침
//1. 사람수 입력받기
//2. 사람수 만큼 키 몸무게 입력받기
//3. 키 몸무게 공백으로 split하기
//4. split된 키 몸무개 객체로 만들어서 array로 만들기
//5. array들 객체 각각 자신보다 몸무게&&키 큰 객체의 수 세서 출력
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//1. 사람수 입력받기
int N = sc.nextInt();
sc.nextLine();
Info[] infos = new Info[N];
for(int i=0;i<N;i++){
//2. 사람수 만큼 키 몸무게 입력받기
String infoText=sc.nextLine();
//3. 키 몸무게 공백으로 split하기
String[] infoTexts = infoText.split(" ");
//4. split된 키 몸무개 객체로 만들어서 array로 만들기
infos[i]=new Info(Integer.parseInt(infoTexts[0]),Integer.parseInt(infoTexts[1]));
}
//등수 출력
for(int i=0;i<N;i++){
int cnt=0;
for(int j=0;j<N;j++){
if(infos[i].getWeight()<infos[j].getWeight()
&& infos[i].getHeight()<infos[j].getHeight()){
cnt++;
}
}
int rank = cnt+1;
System.out.print(rank+" ");
}
}
}
class Info{
private int weight;
private int height;
Info(int weight,int height){
this.weight = weight;
this.height = height;
}
int getWeight(){
return this.weight;
}
int getHeight(){
return this.height;
}
}
물론 2차원 배열로 하는게 더 속도도 빠르고 코드도 간결함!
복습때는 2차원 배열로 한걸로 올리겠움
++ 07/23 복습
stringBuilder 이용
//1. 사람수 N 입력받음
//2. 키 몸무게 입력받고 배열에 넣기
import java.util.Scanner;
class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] info = new int[N][2];
sc.nextLine();
for(int i=0;i<N;i++){
String[] infos = sc.nextLine().split(" ");
info[i][0]=Integer.parseInt(infos[0]);//몸무게
info[i][1]=Integer.parseInt(infos[1]);//키
}
int[] rank = new int[N];
for(int i=0;i<N;i++){
int cnt=0;
for(int j=0;j<N;j++){
if(info[i][0]<info[j][0] && info[i][1]<info[j][1]){
cnt++;
}
}
rank[i]=cnt+1;
}
StringBuilder sb = new StringBuilder();
for(int i = 0;i<N;i++){
sb.append(rank[i]);
sb.append(' ');
}
System.out.println(sb.toString());
}
}
그냥 print out
//1. 사람수 N 입력받음
//2. 키 몸무게 입력받고 배열에 넣기
import java.util.Scanner;
class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] info = new int[N][2];
sc.nextLine();
for(int i=0;i<N;i++){
String[] infos = sc.nextLine().split(" ");
info[i][0]=Integer.parseInt(infos[0]);//몸무게
info[i][1]=Integer.parseInt(infos[1]);//키
}
for(int i=0;i<N;i++){
int cnt=0;
for(int j=0;j<N;j++){
if(info[i][0]<info[j][0] && info[i][1]<info[j][1]){
cnt++;
}
}
int rank = cnt+1;
System.out.print(rank + " ");
}
}
}
string builder가 코드도 더 길고 rank배열도 따로 생성해야해서 더 오래걸릴줄알았는데 더 적게 걸림.
rank 배열 생성안하고 stringbuilder이용
//1. 사람수 N 입력받음
//2. 키 몸무게 입력받고 배열에 넣기
import java.util.Scanner;
class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] info = new int[N][2];
sc.nextLine();
for(int i=0;i<N;i++){
String[] infos = sc.nextLine().split(" ");
info[i][0]=Integer.parseInt(infos[0]);//몸무게
info[i][1]=Integer.parseInt(infos[1]);//키
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<N;i++){
int cnt=0;
for(int j=0;j<N;j++){
if(info[i][0]<info[j][0] && info[i][1]<info[j][1]){
cnt++;
}
}
sb.append(cnt+1);
sb.append(' ');
}
System.out.println(sb.toString());
}
}
맨위에거가 이 코드로 한거. 제일 빠름. 뭐 rank배열 생성한거나 안한거나 속도차이는 크게 없지만 메모리 절약을 위해 불필요한 배열은 생성 안하는게 낫겠찌?
728x90
'with my rubber duck > codingTest' 카테고리의 다른 글
[백준 1152] 단어의 개수 쉬운문제 풀라다가 더 빡침 (0) | 2022.07.22 |
---|---|
[백준 18870] 좌표압축 시간초과파티 + 복습 (0) | 2022.07.19 |
[백준 2798] 블랙잭 풀어보기 쉽군 ㅎ + 복습 (0) | 2022.07.15 |
[백준 10870] 피보나치 수 5 풀기 (0) | 2022.07.14 |
[백준 1978]소수찾기. 소수 몇번짼데 아직도 헤매는지 모르겠네 (0) | 2022.07.13 |
댓글