본문 바로가기
코딩테스트

[백준] 1427번 소트인사이드 - Java

by CuckooBird 2023. 5. 23.

[백준] 실버5 1427번 소트인사이드 - Java

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

 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net


문제


코드

맞았습니다가 뜬 코드입니다. - 메모리 17616KB | 시간 204ms | 메모리 444B

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String s = sc.nextLine();
		char[] ch = s.toCharArray();
		char tmp;
		
		for(int i=0 ; i<ch.length ; i++) {
			for(int j=i; j<ch.length ; j++) {
				if(ch[i] < ch[j]) {
					tmp = ch[i];
					ch[i] = ch[j];
					ch[j] = tmp;
				}
			}
		}
		for(int i=0;i<ch.length;i++) {
			System.out.print(ch[i]);
		}
	}
}
  • 문자열 s에 입력을 받고, toCharArray()함수를 이용해 문자배열로 만듭니다.
  • 버블 정렬을 이용해 문자배열을 정렬합니다. (ASCII 코드를 이용한 정렬이라 int형으로 바꾸지 않음)

Search 🔍

public class test {
	public static void main(String[] args) {
		String a = "hello";
		String b = "hello";
		String c = new String("hello");
		
		System.out.println(a); //hello
		System.out.println(b); //hello
		System.out.println(c); //hello
		
		System.out.println();
		
		System.out.println(System.identityHashCode(a)); //1234
		System.out.println(System.identityHashCode(b)); //1234
		System.out.println(System.identityHashCode(c)); //2223
		
	}
	
}

a와 b 방식으로 한다면, 자바에서는 문자열 리터럴이 동일한 경우, 동일한 메모리 위치에 저장되고 같은 객체를 참조합니다. 이는 문자열 리터럴이 이미 메모리에 존재하는 경우, 새로운 객체를 생성하지 않고 기존의 객체를 재사용하여 메모리를 절약하는 문자열 리터럴 풀(string literal pool)의 동작 원리입니다. 
c 방식으로 한다면, 이 선언은 새로운 String 객체를 생성하고, 해당 객체에 "hello"라는 문자열을 저장합니다. 새로운 객체가 항상 생성되며, 문자열이 동일하더라도 새로운 객체가 생성됩니다. - chatGPT 검색 결과
따라서 a와 b가 같은 객체, c는 다른 객체가 되어 주소값이 같고 다른 것을 확인 할 수 있습니다.


후기

올만에 푸니까 잼네요

버블정렬만 써서 이제 좀 다른 정렬을 써야하는데 이 문제로 다음에 다른 정렬방법으로 풀어봐야겠네요