강사님과 다른 방식으로 풀었는데 확인 부탁드립니다.
204
작성한 질문수 3
public class Main7 {
public static String solution(String str) {
String answer="";
//문자를 카운트한다.
//문자가 2개 이상일 경우 그 문자를 지운다.
ArrayList<Character> list = new ArrayList<>();
for(char a : str.toCharArray()) {
if(!list.contains(a)) {
list.add(a);
}
}
for(char a : list) {
answer += a;
}
return answer;
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.nextLine();
System.out.print(solution(str));
}
}
문제는 통과했지만 시간복잡도?에 대해 궁금한 것이 있어서 질문드립니다.
제가 한 방법은
1.ArrayList<Character> list를 생성
2.주어진 문장 str을 toCharArray()로 변환.
3.for each문을 실행해 주어진 문장을 한글자씩 list에 담지만 list.contains()를 사용하여 list에 문자가 있다면 제외.
4.마지막으로 String 변수에 저장해 출력.
이런 방식으로 풀었는데 저는 for문을 2번 사용했고 강사님은 for문을 1번 수행했습니다.
만약에 시간제한이 있는 문제라면 제 방식은 문제가 있는걸까요? 시간복잡도에 대해 잘 알지못해서 질문드립니다.
답변 1
0
안녕하세요^^
아래 코드처럼 첫 번째 for문에서 스트링도 완성하면 더 좋은 코드가 될 것 같습니다.
import java.util.*;
public class Main{
public static String solution(String str) {
String answer="";
//문자를 카운트한다.
//문자가 2개 이상일 경우 그 문자를 지운다.
ArrayList<Character> list = new ArrayList<>();
for(char a : str.toCharArray()) {
if(!list.contains(a)) {
list.add(a);
answer+=a;
}
}
return answer;
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.nextLine();
System.out.print(solution(str));
}
}
0
시간복잡도로 따지면 그냥 for문을 두개 썼다고 크게 성능이 떨어지진 않는걸로 압니다.
일단 강사님이 달아주신 방법이 조금 더 효율적이지만, 질문자님 코드도 for문을 각각 따로 두번도는거라서 시간복잡도에 크게 영향이 가지않을거에요. 왜냐하면 문자열의 길이(n이라고 가정)만큼 즉 O(n)만큼만 돌기때문입니다.
하지만 for문안에 for문이 있는 2중 반복문을 쓰게되면 n만큼 돌면서 다시 안에서 n만큼 돌기때문에 n x n 즉 O(n^)만큼 돌아서 시간복잡도가 커지게됩니다. 일단 제가 알고있는선에서 답변 남겼는데 자세한것은 시간복잡도에대해 따로 공부해보시면 좋을 것 같습니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
33
1
갑자기 채점 사이트가 바뀌었어요
0
34
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
84
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
46
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
63
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
57
1





