묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-10강 문제풀이중...
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?섹션1에 10강을 수강하고있습니다1-10. 알고리즘 더 풀어보기 (2) 2. 어려움을 겪는 부분강사님께서 제공해주신 문제를 먼저 풀어보았는데아래처럼 내장함수를 이용해서 풀어도 되나? 궁금합니다. 최대한 저런 함수 사용하지 않고 강사님께서 제공해주시는 풀이법으로 알고리즘을 공부하는게 맞는거같은데.. 저처럼 풀면 안되는건가 싶어서요...ㅠㅠ 알고리즘적인 생각이 아닌가도 싶고 ㅠㅠ 고민입니다!일단 char로 순서대로 돌꺼고 어차피 갯수가 1이면 바로 char 을 return해 주면 되지 않을까? 해서 아래처럼 해보았습니다...def find_not_repeating_first_character(string): # 이 부분을 채워보세요! for char in string: if string.count(char) == 1: return char return "_" 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
스레드 관련해서 질문이 있습니다.
조금 동 떨어진 질문일 수 있지만, 궁금증이 해소가 되지 않아 질문드립니다.자바 애플리케이션에서 Thread를 생성해서 실행을 하게될 때, 총 3개의 스택영역을 거쳐야 된다고 생각을 하는데 맞을까요?우선런타임 데이터 영역 유저스레드의 스택영역 JVM 내부 스레드의 스택 영역 운영체제 커널 스레드의 스택 영역 각각을 이렇게 정리해봤습니다.1. 유저 스레드의 스택 영역- 자바에서 Thread객체를 생성하고 실행하면, JVM은 해당 스레드마다 스택 영역을 생성한다.- 이 스택영역은 바이트코드에서 메서드 호출하고 실행할 때 필요한 데이터를 관리한다.- 유저 스레드이고, 애플리케이션의 비지니스 로직을 수행하는 스레드이다.2. JVM 내부 스레드의 스택 영역- 클래스로더, GC, JIT와 같은 JVM내부 작업을 수행하는 스레드는 JVM 내에서 관리되는 스레드이다.- 이 스택 영역은 JVM코드에서 메서드 호출하고 실행할 때 필요한 데이터를 관리한다.- 유저 스레드이고, JVM의 핵심 작업을 수행하는 스레드이다.3. 운영체제 커널 스레드의 스택 영역- 커널 스레드는 실제 CPU에서 실행되는 스레드이다.- 유저 스레드의 실행을 처리하기 위해 유저 모드에서 작업을 처리하다가, 시스템 호출이 필요할 때 커널 모드로 전환되어 커널 스레드가 실제로 시스템 자원에 접근하고 작업을 처리한다.- 커널에서는 커널 스레드의 TCB를 관리하여 각 스레드의 실행 상태를 추적한다.- 이 스택 영역은 커널에서 수행하는 메서드에 필요한 데이터를 관리한다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-5 알고리즘과 친해지기 (2) - 최빈값(알파벳) 구하기
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?: 1-5 알고리즘과 친해지기 (2) 어떤 알고리즘을 학습하고 계신가요?: 최빈값 찾기(알파벳)여기까지 이해하신 내용은 무엇인가요?: 'a' -> ord('a') -> 97 -> chr(97) -> 'a' 이고, 'A' -> ord('A') -> 65 -> chr(65) -> 'A' 이다. 아스키 코드를 활용하고, 가장 기본이 되는 원리는 이렇다.0이 26개인 배열(a_o_a)을 만들고, 주어진 문자열(string)을 반복문으로 순회한다. (for char in string: ... )ord('a') - ord('a') = 0 이고, ord('b') - ord('a') = 1 이고, ... 이 원리에 따라 ord(char) - ord('a') 를 하면, char가 몇 번째 순서의 알파벳인지 구할 수 있다. 이를 0이 26개인 배열(a_o_a)의 인덱스(i)로 활용한다.string을 반복문으로 순회하면서, (만약 숫자나 띄어쓰기가 아니고 알파벳이라면) a_o_a[i] += 1 을 한다. a_o_a 에 각 알파벳의 빈도수가 저장이 된다.a_o_a를 반복문으로 순회하면서, max_alphabet_index를 구한다.chr(max_alphabet_index + ord('a')) 을 하면 최종적으로 최다 빈도수인 알파벳이 구해진다. 2. 어려움을 겪는 부분 저는 string.count(char)를 이용하여 풀었습니다. 그런데 이 아스키 코드 원리를 활용한 알고리즘이 많이 출제되나요? 코테 출제하시는 분들께서 아스키 코드를 활용한 로직을 더 선호하시는지 궁금합니다!
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1주차 숙제 두번째 문제 풀이에서..
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 1-11 2. 어려움을 겪는 부분첫 시도에서 count_to_all_zero 와 count_to_all_one이 모두 1이 나오는 이유가 첫번째 문자에 대해서 비교를 안하고 있다고 나와있는데,첫번째 문자가 아니라 맨 마지막 문자를 비교 안하고 있는 것이 아닌가 궁금합니다! 첫 시작에서는 0번째 인덱스와 1번째 인덱스를 비교하지만마지막 len(string) - 1번째 인덱스와 len(string)를 비교할 때는 마지막 문자에 대한 카운팅이 이루어지지 않는게 아닌가 하는데.. 제가 잘못 이해하고 있는걸까요..? ㅠㅠ
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-10 문제 이런 접근은 어떤가요?
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 1-10 2. 어려움을 겪는 부분재취준을 준비하면서 여러 기업의 코딩테스트를 봤었는데요.항상 시간 예외성 검사에 걸려서 코딩테스트를 탈락합니다.그래서 이 문제를 보면서도 시간을 최대한 줄이고자 노력했습니다. 3. 시도해보신 내용input = "abadabac" def find_not_repeating_first_character(string): while True: found_flag = False if len(string) > 1: target_char = string[0] for compare_char_index in range(1,len(string)): if target_char == string[compare_char_index]: found_flag = True break if found_flag: string = string.replace(target_char, "") else: return target_char else: return "_" result = find_not_repeating_first_character print("정답 = d 현재 풀이 값 =", result("abadabac")) print("정답 = c 현재 풀이 값 =", result("aabbcddd")) print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa")) 제가 봐도 가독성이 안좋긴한데.. 저는 이 문제를 풀면서 가장 먼저 생각한 것이 '이미 한번 훑은 알파벳에 대해서는 순회를 제외한다' 였거든요.그런데 글을 쓰면서 다시 확인해보니 string을 replace할 때 오히려 더 시간이 늘어날 것 같기도 하구요.. ㅠㅠ for문의 대상이 되는 객체를 for문 안에서 변경할 수 없기에 부득이하게 found_flag라는 변수를 선언해서 for문 밖에서 판단 후 replace 하는 식으로 코드를 작성했습니다. 궁금한 점이, 딩코딩코님은 이 접근법에 대해서 어떻게 생각하시나요? 저는 정말 간단할 수 있는 문제를 20분 정도의 시간을 고민하면서 풀었는데, 이런 부분 때문에 실제 코딩테스트를 응시할 때도 시간이 부족했습니다.. ㅠㅠ 코딩테스트를 보면 1 <= N <= 1,000,000,000이런 식으로 제한을 두다 보니.. '길이 1억의 string이 주어졌을 때 전부 순회하면 시간이 너무 길어지지 않나..?' 하는 생각이 항상 발목을 잡는 것 같습니다.. 이런 문제를 접근할 때 어떤 식으로 접근해야 할지 조언 부탁드립니다..항상 좋은 강의 감사드립니다!! (_ _)
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
metaspace 관련 문의드립니다.
안녕하세요. 좋은 강의라 너무 잘 듣고 있습니다.metaspace 관련하여 궁금한 점이 있습니다. "세대별 컬렉션 이론" 강의 - 13:00의 heap 영역 그림을 보시면,metaspace가 heap 영역 내부에 포함이 되어있는데,자바 8버전 이후로 Permanent Generation 영역이 metaspace로 변경되면서 heap 내부가 아니라 네이티브 메모리로 넘어간게 아닌가요? -XX:MaxPermSize 옵션도 없어진 것으로 알고 있습니다. 관련 내용 확인 부탁드립니다.감사합니다. :)
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-9 알고리즘 문제 다른 코드
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?1-9 알고리즘 더 풀어보기 (1) 2. 어려움을 겪는 부분문제의 조건이 모든 연산은 왼쪽에서 순서대로 이루어진다. 라고 되어있어, 연산을 해야하는 순간에 가장 최대가 될 수 있는 연산만 골라서 계산한다 라고 떠올려보았습니다. 그렇다면 해당 문제를 greedy로 생각해봐도 괜찮을까요? 아직 진도 초반이지만, 평소 코테 문제를 볼 때 어느 부분에 힌트를 잡고 어떤 알고리즘으로 풀어야하는지에 대해 감이 없는 상태라서 이런 문제들(연산이 순서대로 된다던지, 거스름돈 문제처럼 단위가 결정된다던지)은 greedy로 보면 되는지 여쭙고싶습니다.아래는 풀이한 코드입니다.def find_max_plus_or_multiply(array): answer = array[0] for n in range(1,len(array)): if answer + array[n] > answer * array[n]: answer += array[n] else: answer *= array[n] return answer result = find_max_plus_or_multiply print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4])) print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4])) print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
시간복잡도 설명부분에서 질문이 있습니다
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?1챕터 7강 (공간 복잡도 판단하기) 2. 어려움을 겪는 부분1-7 강에서 시간 복잡도 설명을 해주시면서아래 코드들을 직접 array 길이의 값인 26을 대입하여 비교해주셨는데요,사실상 첫 번째 코드는 이중 for문이므로 O(N^2)이고, 두 번째 코드는 for문을 각각 1개씩 썼기때문에 O(N)라 시간복잡도면에서 큰 차이가 나지않나해서요강의에서는 직접 숫자를 대입한 후에 첫 번째 코드와 두 번째코드는 N^2에 비해 효율에 있어 차이가 없다고 말씀하셔서 어디 부분에 제가 혼동이 오는지 궁금하여 질문드립니다! for alphabet in alphabet_array: # alphabet_array 의 길이(26)만큼 아래 연산이 실행 occurrence = 0 # 대입 연산 1번 실행 for char in string: # string 의 길이만큼 아래 연산이 실행 if char == alphabet: # 비교 연산 1번 실행 occurrence += 1 # 대입 연산 1번 실행 if occurrence > max_occurrence: # 비교 연산 1번 실행 max_alphabet = alphabet # 대입 연산 1번 실행 max_occurrence = number # 대입 연산 1번 실행 for char in string: # string 의 길이만큼 아래 연산이 실행 if not char.isalpha(): # 비교 연산 1번 실행 continue arr_index = ord(char) - ord('a') # 대입 연산 1번 실행 alphabet_occurrence_list[arr_index] += 1 # 대입 연산 1번 실행 max_occurrence = 0 # 대입 연산 1번 실행 max_alphabet_index = 0 # 대입 연산 1번 실행 for index in range(len(alphabet_occurrence_list)): # alphabet_array 의 길이(26)만큼 아래 연산이 실행 alphabet_occurrence = alphabet_occurrence_list[index] # 대입 연산 1번 실행 if alphabet_occurrence > max_occurrence: # 비교 연산 1번 실행 max_occurrence = alphabet_occurrence # 대입 연산 1번 실행 max_alphabet_index = index # 대입 연산 1번 실행
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
예외 처리 강의 내용 관련 질문
안녕하세요 선생님섹션 11의 예외 처리 강의 중 [두 가지 예외 종류] 파트를 공부하다가 궁금증이 생겨서 질문드립니다. Checked Exception과 Unchecked Exception을 Exception 클래스의 파생이냐, 혹은 RuntimeException의 파생이냐에 따라 분류하는 것으로 설명해주신 것으로 이해했는데요. 그런데 1.4v 교안 기준으로 305페이지에(강의 기준으로 2분 32초) Unchecked exception 열에서 사례를 들어주신 SQLException, IOException, ClassNotFoundExcpetion은 jdk를 확인해보니 Exception의 파생이었습니다.(ReflectiveOperationException은 Exception 클래스의 파생입니다.)jdk 코드를 기준으로 보면 SQLException, IOException, ClassNotFoundExcpetion은 Checked Exception에 해당하는 것으로 보이는데, 선생님께서 해주신 설명과 다른 부분이 있어서 혼동이 오는데 어떤게 맞는건지요? 그리고 강의 내용을 바탕으로 좀 더 공부를 해보니 제가 이해한 바는 아래와 같습니다. 혹시 잘못 이해한 부분이이 있을까요?1. Checked, Unchecked Exception 모두 예외 발생은 Runtime에서 이루어진다.2. 파일 I/O, DB 접근은 실행 환경에서 자주 발생할 수 있는 문제이기 때문에, 개발자가 이를 예상하고 처리하도록 컴파일 시점에서 컴파일러에 의해 예외처리가 강제된다. -> SQLException, IOException 예외가 Checked Exception인 이유 감사합니다.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
[JVM이 문자열 상수를 관리하는 구조] 관련 질문드립니다.
안녕하세요 선생님~[JVM이 문자열 상수를 관리하는 구조] 강의를 듣던 중에 이해가 잘 안되는 부분이 있어서 질문드립니다. 제가 기존에 알고 있던 내용과 더불어 강의를 통해 이해한 바로는1. "런타임 상수 풀"은 문자열 리터럴 객체가 아닌 문자열 리터럴의 심볼릭 참조를 저장하는 곳, 즉 실제 객체는 저장되지 않음 - 물론 여러 다른 심볼릭 참조 또한 저장됨2. String s1 = "Hello"처럼 리터럴로 선언된 String instance는 Heap 메모리 영역의 "문자열 상수 풀"에 저장3. String s3 = new String("Hello")는 객체로, Heap 메모리 영역이면서 문자열 상수 풀이 "아닌" 영역에 저장. 즉, 문자열 상수 풀에 독립적4. 따라서 문자열 상수 선언(String s1 = "Hello") 또는 intern() 메서드 호출할 경우에만 문자열 상수 풀에 문자열 저장이 발생위의 이해를 전제로 질문은 아래와 같습니다.[12분 22초]쯤 선생님께서 문자열 상수 풀에서 문자열을 조회할 때,먼저 Runtime Constant Pool 내에 문자열 리터럴을 조회하고, 있으면 바로 반환한다고 하셨는데요.1. 런타임 상수 풀에서만 리터럴을 조회하고 끝나는 절차가 맞는지요? 혹은 "런타임 상수 풀"에 저장된 문자열 리터럴의 심볼릭 참조를 타고 "문자열 상수 풀"의 문자 리터럴 객체를 탐색하는 것까지가 맞는 처리 과정인지요? -> 저는 후자가 맞다고 생각하고 있습니다.2. intern() 호출 시, 런타임 상수 풀 내의 "찾고자 하는 문자열 리터럴의 심볼릭 참조"가 존재하지 않는다면, JVM이 문자열 객체를 생성하여 Heap의 문자열 상수 풀에 저장하나요? 혹은 Heap 영역이지만 문자열 상수 풀이 아닌 영역에 저장되나요? -> 저는 intern() 호출로 생성된 객체는 항상 문자열 상수 풀에 저장되는 걸로 알고 있습니다.3. 그리고 2번 질문과 연관된 질문인데, 수업자료의 예제에서public class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); String s3 = new String("World"); String s4 = s3.intern(); System.out.println(s3 == s4); System.out.println("World" == s3); // 1번 System.out.println("World" == s4); // 2번 } }18분 51초 쯤 선생님께서 말씀하시기를 s3.intern()으로 인해 "World" 리터럴이 Runtime constant pool에 생긴다고 하셨는데, Runtime constant Pool은 오직 심볼릭 참조만 가지고 있는거 아닌가요? Runtime constant pool는 클래스 로드 시 정적으로 생성된 심볼릭 참조를 관리할 뿐이고, 동적으로 업데이트 되는건 아니지 않나요?따라서 s3.intern()으로 인해 "World" 리터럴은 Runtime Constant Pool이 아니라 Heap 영역의 문자열 상수 풀에 들어가야하는 것이 아닌지요?마지막으로,[System.out.println("World" == s3); // 1번]여기서 false가 나온 이유는 new로 동적 할당된 "World"은 문자열 상수 풀이 아닌 Heap 영역에 저장되기 때문에s3 참조자는 문자열 상수 풀이 아닌 그 외 Heap 영역의 String instance를 바라보고 있고,s4 참조자는 intern() 함수로 인한 호출로 문자열 상수 풀에 생긴 객체이기 때문에 false가 나온게 아닌지요?제가 잘못 알고 있는 상태에서 잘못된 질문을 길게 한건가 싶어서 죄송스럽네요.늘 좋은 강의 감사합니다!
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
클래스 로딩 순서에 관해 질문이 있습니다.
10분 24초에 클래스를 로딩하기에 앞서서 검사, 준비, 해결과정을 거친다고 하셨는데 로딩을 한 후 링킹(검사,준비, 해결)과정을 수행하는 것이 아닌가요? 로딩전 링킹과정 후 로딩을 하는 것인가요? 제가 잘못이해하고 있는 것인지 궁금합니다
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
메타데이터의 위치에 대한 질문입니다.
널널한 개발자님. 항상 잘 듣고 있습니다! 좋은 강의 감사합니다. 복습을 하던 도중 잘 이해가 안되는 부분이 있어 질문드립니다.인스턴스의 메타데이터라 함은 강의 내용 중 해시코드, 오브젝트 나이, 락플래그를 말하는 것 같습니다.강의 4분경에서 이런 메타데이터가 Klass word에서 참조하는 Metaspace에 저장되어 있다고 하셨습니다.그리고 강의 6분경 핫스팟 VM 객체 Lock flag슬라이드 보거나, 실제 예제를 실행시켜 나온 결과(23:35)를 보면 Markword에도 해쉬파일과 락플래그가 있는 것으로 보입니다.Metaspace, Markword 둘 다 같은 인스턴스의 해시코드값(+락플래그)을 가지는 건가요? 그러면 Metaspace는 생성된 인스턴스 모두의 메타데이터를 가지는건가요? 새벽에 보느라 머리가 잘 안돌아가네요..긴 글 읽어주셔서 감사합니다!
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
문자열 리터럴과 문자열 객체 관련해서 질문이 있습니다.
안녕하세요!강의를 듣던 도중에 의아한 부분이 있습니다. 8분 43초부터 들은 바에 의하면문자열 리터럴로 생성한 문자열은 (1) Runtime Constant Pool에 저장되고, (2) 사용되는 시점에 String Contant Pool에 복사된다.new 키워드로 생성한 문자열 객체는 String Constant Pool에 저장된다. (이 내용은 10분 28초) 위 내용을 다음 사진처럼 표현해보았습니다. 여기서 한 가지 의아한 부분이 있는데요.문자열 리터럴과 new 키워드로 생성한 문자열 객체 둘 다 String Contstant Pool에 저장된다면, 동일성 비교에서 true가 반환되지 않을까요?? 그러나 실제로는 동일성 비교를 하면 false를 반환하게 됩니다.제가 이해했던 바로는 문자열 리터럴은 String Constant Pool에 저장되고, new 키워드를 통한 문자열 객체는 Heap 영역에 저장되기 때문에 동일성 비교에서 false를 반환한다라고 생각했습니다.String s1 = "hello"; String s2 = "hello"; String s3 = new String("hello"); s1 == s2; // true s1 == s3; // false 결론적으로 제가 궁금한 부분은..new 키워드로 사용한 문자열 객체는 String Constant Pool이 아닌 단순히 JVM Heap 영역에 저장되는 것이 맞지 않는지 궁금합니다! 좋은 강의 감사합니다!!(11분 08초에 natvie 오타가 있는 것 같습니다!)
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
클래스 로더 및 로딩 과정 16:00초에 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 클래스 로더 및 로딩 과정 16:00초에 질문이 있는데요.링킹 준비 단계에서 "객체 인스턴스가 저장될 메모리 공간을 확보하고 0으로 초기화"라고 되어 있는데, 제가 알기로는 클래스 수준의 정적 필드가 기본값으로 초기화로 알고 있습니다.객체 인스턴스는 객체가 생성 되었을 때 기본 값으로 초기화가 이뤄지고 생성자가 있을때 말씀처럼 초깃값이 다시 설정 되는걸로 알고 있는데요. 제가 잘못 이해 한걸까요.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
추상 클래스와 인터페이스에 대해서 궁금한 것이 있습니다.
안녕하세요 ㅎㅎ좋은 강의 제공해주셔서 감사합니다. 추상 클래스와 인터페이스 사용 시점에 대해 궁금한 것이 있습니다. 제가 처음에 생각한 내용은추상 클래스 : 부모 클래스와 자식 클래스가 공통으로 제공하는 내용(메서드)도 존재하지만, 자식클래스 별로 다른 내용을 제공할 때는 abstract 메서드를 사용하여 구현을 강제시킨다.인터페이스 : 부모와 자식 간에 공통으로 가지는 내용(메서드 내용이 동일한)이 없으므로, 상속받는 클래스가 반드시 메서드를 구현한다. 그런데 JAVA8부터 인터페이스에 default 메서드가 추가되었더군요.인터페이스에 default 메서드를 선언하면, 인터페이스를 상속받는 클래스에서 구현을 하지 않고도 사용할 수 있더라구요.interface Shape { final int SIZE = 5; void render(); default int getSize() { return SIZE; } } class Rectangle implements Shape { @Override public void render() { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { buffer.append("*\t"); } buffer.append("\n"); } System.out.println(buffer); } }public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int input = sc.nextInt(); Shape shape; if (input == 0) { shape = new Rectangle(); } else { shape = new Triangle(); } shape.render(); System.out.println(shape.getSize()); } } 그렇다면 default 메서드가 추상 클래스의 일반 메서드(추상 클래스가 아닌)와 동일하게 작동하게 되는데public abstract class Shape { public static final int SIZE = 5; public abstract void render(); public int getSize() { return SIZE; } }추상 클래스와 인터페이스를 사용하는 시기(?)를 어떻게 구별해야할까요? 구글링을 해보니 인터페이스에 default 메서드가 추가된 이유가 추후에 인터페이스에 새로운 메서드를 추가했을 때, 해당 인터페이스를 상속하고 있는 클래스에서 오류가 발생하지 않기 위해서라고 하는데그 오픈소스가 엄청 유명해져서 전 세계 사람들이 다 사용하고 있는데, 인터페이스에 새로운 메소드를 만들어야 하는 상황이 발생했다. 자칫 잘못하면 내가 만든 오픈소스를 사용한 사람들은 전부 오류가 발생하고 수정을 해야 하는 일이 발생할 수도 있다. 이럴 때 사용하는 것이 바로 default 메소드다. 결론적으로 내용을 정리하게 되면추상 클래스에서 새로운 메서드를 추가해야 한다면 abstract를 추가하지 않는다.인터페이스에서 새로운 메서드를 추가해야 한다면 default 메서드를 사용한다.default 메서드가 추가 되면서 추상 클래스와 인터페이스를 언제 사용해야 하는지 잘 모르겠습니다...! 감사합니다!
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-4 알고리즘과 친해지기 강의에서 풀이 맞는지 확인 좀 부탁드려요~
위 화면은 강의 내용 일부입니다.그런데 주석에 저렇게 설명하셨는데 아래와 같이 진행되는 거 같아서 질문드립니다.3, 5, 6, 1, 2, 43 -> 3, 5, 6, 1, 2, 45 -> 3, 5, 6, 1, 2, 46 -> 3, 5, 6, 1, 2, 4,...이렇게 진행되는게 아닌건가 싶은데.. 확인 좀 부탁드려요.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
[실습3-2] MyString에 복사 생성자 만들기에서 deepCopy( ) 메서드 리턴 타입
안녕하세요. 정말 별거 아닌 질문이지만..[실습] MyString에 복사 생성자 추가 1:50초에서 deep copy를 위한 메서드를 만들라고 하실 때 메서드의 리턴 타입을 MyString으로 하라고 하셨는데..void라고 이해해도 될까요?.. 좋은 강의 감사히 잘 보고 있습니다. 항상 건강하세요!
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
시간 복잡도가 얼마나 걸리는지 확인하는 방법
1. 현재 학습 진도1-10 듣고 있습니다 2. 어려움을 겪는 부분 이 코드에서 for index in range(len(alphabet_occurrence_array)) 는 N이 아니라 상수이기때문에 O(1)라고 말씀해주셨는데 해당 부분이 잘 이해 가지 않습니다.. for문이라도 정해진 숫자의 범위가 돌면 O(n)의 시간 복잡도가 아닌건가요? 만약 이렇게 이해하게 되면 for char in string: 코드에서 string도 배열에 크기에 정해진 숫자만큼만 돌게 되는데.. 헷갈립니다..! 단순히 변수의 for문이면 n 상수의 for문이면 1 이렇게 생각하면 되는건지 궁금합니다!
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
보이지 않는 임시 객체 9:48초에 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.보이지 않는 임시 객체 9:48초에 질문이 있습니다.자바 컴파일러가 String s1 = "Java";를 String s1 = new String("Java");로 변환한다고 하셨는데 자바 컴파일러는 변환 하는것이 아닌걸로 이해하고 있어요.. String은 리터럴 방식과 객체 생성 방식이 다르게 관리되고 있는걸로 알고 있는데 혹시 제가 잘못 이해를 하고 있는건가 싶어서요.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
동일 값 로직 처리
1. 현재 학습 진도1-5 알고리즘과 친해지기(2) 2. 어려움을 겪는 부분# def find_max_occurred_alphabet(string): # alphabet = [0] * 26 # for i in string: # if i.isalpha(): # alphabet[ord(i) - ord('a')] += 1 # # max = alphabet[0] # index = 0 # for i in range(len(alphabet)): # if alphabet[i] > max: # max = alphabet[i] # index = i # # return chr(index+ord('a')) from collections import Counter def find_max_occurred_alphabet(string): string = [char for char in string if char.isalpha()] counter = Counter(string) print(counter) return max(counter, key=counter.get) result = find_max_occurred_alphabet print("정답 = i 현재 풀이 값 =", result("hello my name is dingcodingco")) print("정답 = e 현재 풀이 값 =", result("we love algorithm")) print("정답 = b 현재 풀이 값 =", result("best of best youtube")) 3. 시도해보신 내용 안녕하세요. 첨부한 코드 중 주석 처리한 부분은 문제를 보고 사전에 제가 작성한 코드입니다. 결과는 예상과 동일하게 출력됩니다.그 밑에는 다른 풀이 방법을 찾다가 Counter 클래스를 사용하여 작성한 코드입니다. 본 강의에서는 카운터가 동일한 경우, 기존의 값을 변경하지 않는 방식이라 i가 출력되지만, 해당 방법을 사용하면 입력 순으로 o가 출력됩니다.이 경우 최빈값을 찾아내는 코드는 맞지만, 값이 동일한 경우에 처리하는 로직이 다르기 때문에 발생한다고 이해하면 될까요?답변해주신다면 감사하겠습니다.