묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
코딩센세님.. 이거 제가 이해를 잘못하는걸까요?
29:10분에보면 "176 ~ 177까지의 2의 제곱수가 몇 번 포함되어 있는지 나오겠네요"라고 하시는데 제가 생각할 땐"176 ~ 177까지의 2의 제곱이면서 최대 약수의 합"이라고 생각하는데 두 개의 말은 다른 말 아닌가요??
-
미해결김영한의 실전 자바 - 중급 2편
LinkedHashSet 구조에 관해 질문이 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]LinkedHashSet은 HashSet과 같은데 Node를 추가해서 입력 순서를 유지한다 들었습니다.그럼 만약에 HashIndex가 같은 경우(해시 충돌) Node도 HashSet과 같이 List 형식으로 저장이 되는게 맞을까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
우선 1090 모이기 문제를 완전 탐색으로 해보려고 하는데...
N=4 일 때 좌표 4개가 주어지고 1명, 2명, 3명, 4명 모였을 때의 경우의 수를 비교해야할 것 같은데1명 모였을때 경우의 수, 2명 모였을 때 경우의 수, 3명 모였을 때 경우의 수, 4명 모였을 때 경우의 수를어떻게 그 좌표 조합을 만들 수 있는지 고민입니다.1명 모였을 때는 단일 반복문, 2명일 때 2중 반복문, 3명일 때 3중 반복문이 필요할 것 같은데... 이게 N개면 N개의 반복문을 만드는게 맞나 싶어서요.. ㅠ
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
ADT강의 관련 질문 있습니다.
항상감사합니다.ADT강의 보고 코드 확인하는 중 질문이 생겨 글 올립니다. 1.동적바인딩과 다형성 등 사용성 증가를 위해 구체 자료를 가리키는 추상화 자료노드를 구성하여 함수로 그 추상화자료노드에 일차적으로 접근하는 개념이 ADT라고 파악되는 데 여기에 함수 포인터를 구조체 맴버로 포함시킨 이유가 궁금합니다. 그냥 구조체 외부에 선언된 getkey 함수를 사용해서 sorting을 해도 기능상 차이는 없을 것 같은데 포함시키신 이유는 객체지향개념을 적용하기 위함인지 아니면 구조체 안의 함수포인터 변수로 실현된 getkey 함수가 외부에 선언된 getkey함수를 사용할 때와 비교해서 실제 기능상 차이가 있는지 궁금합니다. 2.함수포인터는 함수를 가리키는 포인터 변수로 함수의 이름과 같으면 안되는 것으로 알고 있는데 이 예제의 경우 컴파일 되는 것은 구조체 안의 포인터 변수라서 그런 것인지. 궁금합니다. 3.강의에서 언급해 주신 구조체 안의 함수포인터 개념을 너무 흥미있게 들었습니다. 그렇다면 그 개념의 연장선이 객체지향 클래스 개념이라고 보는데 결국 c언어는 절차지향. c++은 객체지향으로 단편적으로 구분되는 것이 아니라 c언어 프로그래밍시 하나의 기능단위 캡슐화를 시도하는 프로그래밍 기법이 객체지향이 아닌지. 그리고 그것을 구현하기 쉽게 만든 것이 c++같은 객체지향 프로그래밍 언어가 아닌가 하는 궁금증이 생겼습니다. 이런 관점에서 보자면 함수포인터는 결국 c언어 안에서 이미 함수형프로그래밍의 개념으로 접근할 수 있는 수단이 아닌지 하는 생각도 듭니다. 이러한 접근이 맞는 것인지 여쭤봅니다. 4.getkey함수가 name 이나 phone을 반환하는데 호출함수이름이 SortListByKey()가 적절하지 않나 궁금합니다. 5.기타 질문으로 lineardatastructure.c 파일 안의 한글이 깨져 보이는 문제가 있는데 비쥬얼 스튜디오 및 윈도우에서 utf-8으로 환경설정을 전부 변경해도 여전히 깨져 보입니다. 다른 해결방법이 있는지 궁금합니다. 감사합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
for,while 문
제가 알기로는 for, while문 모두 반복문인데 왜 O(n)으로 계산되는건가요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090 문제... 두 번 들어도 참 어렵네요..
정말 머리가 굳어진 기분이네요... 두 번 들어도 와닿지가 않네요..더 들어봐야겠다..
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드
역시 갓 영한님 믿고듣는 강의.. 감사합니다 질문이 하나 있습니다. public static <T> T genericMethod(T t) { System.out.println("generic print: " + t); return t; }이 코드에서 타입 지정해주는 T를왜 다 똑같은 타입으로 써야 하는지 궁급합니다. 예를 들자면 위 코드를 보면 매개변수 타입도 T이고 반환 타입도 T인데매개변수의 타입과 반환타입을 꼭 맞춰서 써야 하는지 궁금하네요 public static <T> T genericMethod(A t) { System.out.println("generic print: " + t); return t; }이런식으로는 왜 못쓰는건가요 ?(매개변수로는 String을 받지만 결과 타입은 Integer 로 할수도 있지않나요 ? 근데 제네릭 메서드는 왜 이렇게는 불가능한가요?)
-
미해결김영한의 실전 자바 - 중급 2편
섹션 10. Collections
Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3, "ab", 4); 실행 결과 1번째 map = {a=1, b=2, c=3, ab=4} 2번째 map = {b=2, a=1, ab=4, c=3} 3번째 map = {ab=4, c=3, b=2, a=1} 4번째 map = {b=2, c=3, ab=4, a=1} 5번째 map = {b=2, a=1, ab=4, c=3}Map은 순서를 보장하지 않고, 중복을 허용하지 않습니다. HashMap에서는 key값을 가지고 hashCode를 구하고 hashIndex에 값을 보관하기에 입력한 순서대로 저장하는 것을 보장할 수 없습니다.그런데 map.of()로 생성을 했을 때는, 그 순서가 실행 할 때마다 달라져있습니다. 랜덤으로 돌린 것처럼...왜 매번 입력되는 값의 순서가 달라지는 건가요ㅠㅠ
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 10. Comparable
public class MyUser implements Comparable<MyUser> { private String id; private int age; public MyUser(String id, int age) { this.id = id; this.age = age; } public String getId() { return id; } public int getAge() { return age; } @Override public int compareTo(MyUser o) { return this.age < o.age ? -1 : (this.age == o.age) ? 0 : 1; }MyUser의 멤버 변수는 private인데 compareTo(MyUser o)에서 this.age는 본인의 값을 가져다 쓴다고 쳐도 o.age로 호출이 어떻게 가능한 건가요??
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 2. 문제풀이 질문드립니다.
class Suttle<T extends BioUnit> 으로 상한이 정해져있고, 타입 매개변수로 받아서public class UnitPrinter { static <T extends Shuttle> void printV1(T t) { t.showInfo(); } static void printV2(Shuttle<?> t) { t.showInfo(); } } UnitPrinter를 구현할 때 직접 셔틀에 있는 메서드를 호출할 수 있기 때문에 위와 같은 코드로 구현했습니다.동작은 제대로 하지만, 혹시 문제점이 존재하는 코드인지, 실무에서 지양하는 코드 구현 방식인지 궁금해서 질문드립니다.감사합니다.
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 9. 문제와 풀이1
public static void main(String[] args) { String text = "Orange banana apple apple banana apple"; //코드 작성 String[] textArr = text.split(" "); System.out.println(Arrays.toString(textArr)); Map<String, Object> map = new HashMap<>(); for (String string : textArr) { map.put(string, 0); } for (String key : textArr) { if (map.containsKey(key)) { map.put(key, (map.get(key) + 1)); } } System.out.println(map); }문제와 풀이1에 3번째 문제입니다!Map<String, Object> map = new HashMap<>();HashMap을 생성 할 때, 값을 받는 부분은 뭐가 들어갈 지 몰라서 Object를 넣었습니다.코드를 진행하면서 for (String key : textArr) { if (map.containsKey(key)) { map.put(key, (map.get(key) + 1)); } }의문이 생긴 건 이 부분입니다.map.put(key, (map.get(key) + 1));여기서 오류, 빨간줄이 나왔습니다.-> 오류: java: bad operand types for binary operator '+'first type: java.lang.Objectsecond type: int map을 생성할 때, key는 String으로 받고,value는 Object로 받는다고 선언했는데 왜 오류가 뜨는 건가요?map.get(key) + 1은 int타입으로 나오는데 오토박싱으로 Integer 타입으로 변환되고, Object에 들어갈 수 있지 않나요?오토박싱이 안 되는 건가 해서 Integer.valueOf()를 써봐도 안 되더라구요..ㅠㅠ 물론 선언하는 부분에서 Object를 Integer로 바꾸면 해결이 되기는 합니다만..왜 오류가 나는지 모르겠습니다ㅠㅠ
-
해결됨코딩테스트 [ ALL IN ONE ]
스택 안에 왜 -1과 1이 들어가는지 궁금합니다.
안녕하세요 코딩 테스트를 공부하고 있는데 이해가 안 되는 부분이 있어 글을 올립니다.5행에 있는[-1]이 cur_day를 가리키고[1]이 cur_temp를 가리키는 걸로 이해를 하고 있습니다.궁금한 점: 제가 이해한 부분이 맞는다면 왜 스택 부분에 -1과 1이 들어가는지 궁금합니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
shallow copy를 쓰긴하나요?
쓰는 곳이 있나요? 예시가 생각이 나지않네요. assingment랑 비슷하면서 다르긴 하나. assignment는 복사란 개념보단 직접 그 point한 메모리안의 값을 assign 한다는 의미로 받았고. shallow copy 는 새로운 메모리 공간 안에 값들을 복사 하고자(reference value)하는 memory의 address를 point해서 reference 값을 가져온다는 의미로 이해했습니다.shallow copy를 했을 때랑 assignment 했을 때랑 =, [:]말곤 차이를 잘 못느끼겠습니다. 다른 건 그냥 assign하는 memory address만 다르다로만 이해했습니다. hard copy는 새로운 memory안에 복사 하고자 하는 값도 똑같이 복사한다는 걸로 이해했습니다.
-
미해결김영한의 실전 자바 - 중급 2편
9강 map과 set && duque Peek()
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]9강을 들으면서 두가지의 궁금증이 생겼습니다. Hashset이 내부에서 Map을 이용한다고 하셨는데, hashSet은 콜렉션이고 map은 아닐 수 있는 지 궁금합니다. stack이랑 queue를 둘 다 deque를 사용하여 구현한다고 하셨는데 이때 peek() 함수의 결과가 똑같은 deque를 사용해도 다른 걸 확인 했습니다. 이게 어떨 때는 stack 구조인지 어떨 때는 queue 구조인지 어떻게 알고 peek()을 해주는 건가요?입력 할 때 offer와 push를 사용하는 것에 대한 차이를 인지하고 다르게 출력하는 걸까요?
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 8。map1
Map<String, Integer> studentMap = new HashMap<>(); . . . Collection<Integer> values = studentMap.values();studentMap.values()를 하면 Collection타입으로 반환해준다고 하셨는데 의문이 하나 들었습니다.Collection은 인터페이스, map은 Collection을 상속받지 않음으로 Collection은 studentMap.values()를 담을 수 없지어야 한다고 생각했는데... 모르겠습니다ㅠㅠ
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 7 . 문제와 퓨리1
Set<Integer> set = new TreeSet<>(List.of(30, 20, 20, 10, 10));set에 값을 넣을 때, List는 전달 할 수 있다고 하셨는데,List.of();를 사용하면 ()안에 값을 List에 넣는 거고,List의 타입은 Set<Integer>를 보고 Integer로 타입추론을 하게되고,List<Integer>이기 때문에 ()안에 들어간 int형 (30, 20, 20, 10, 10)은 오토박싱이 돼서int -> Integer 타입으로 변경되서 List에 들어간다.제가 이해한 게 맞나요??ㅠㅠ
-
해결됨김영한의 실전 자바 - 중급 2편
타입 이레이저 질문
제가 실습했던 컴파일된 AnimalHospitalV3.class 파일을 인텔리제이에서 복호화해서 보면타입 매개변수인 T와 같은 표현이 살아있는데 왜 그런 것일까요? 컴파일 후라면 클래스명이 AnimalHospitalV3<T extends Animal>이 아니라AnimalHospitalV3 로 바뀌어 있어야할 것 같아서요. 글구 T들은 Object로 변해있어야 할 것 같은데...궁금합니다
-
해결됨김영한의 실전 자바 - 중급 2편
Generate로 hash 생성시, hash()와 hashCode()
Generate를 이용해서Hash 생성시@Override public int hashCode() { return Objects.hashCode(id); }와 같이 영상과는 달리 hash()가 아닌 hashCode()가 생성되어 결과물이 미묘하다 다릅니다.검색해보니, hash가 hashCode 배열 처리된 걸로 알고 있어서 차이가 있다는 건 알겠는데@Override public int hashCode() { return Objects.hash(id); }일부러 Code를 삭제해서 영상처럼 위와 같이 실무에서도 hash를 기반으로 사용할지, 아니면 IDE에서 기본으로 제공하는 대로 hashCode를 사용해도 딱히 상관이 없나요?
-
미해결김영한의 실전 자바 - 중급 2편
섹션 7. onlyHash
hashCode만 오버라이딩으로 재정의하면 해시코드는 같아지지만, 결국 equals비교 Object의 것을 사용해서 실패하게 된다고 하셨습니다.그런데 MemberOnlyHash 클래스에서 equals를 재정의를 했다고 가정했을 때, 어떻게 MemberOnlyHash로 갈 수 있는 건가요?오버라이딩 되어서 우선권을 갖고있는 건 알고있습니다.이해가 안 가는 부분을 어떻게 말을 해야 할 지 조금 복잡하지만... 1번 코드MyHashSetV2 set = new MyHashSetV2(10); NoEqualsOnlyHash m1 = new NoEqualsOnlyHash("A"); set.add(m1);1번 코드에서 set에서 add를 호출합니다. 2 코드public boolean add(Object value) { LinkedList<Object> bucket = buckets[hashIndex(value)]; if (bucket.contains(value)) { return false; }그리고 2번 코드에 들어가게 되고 3번 코드 public boolean add(MemberOnlyHash m1) { LinkedList<Object> bucket = buckets[0]; if (bucket.contains(m1)) { return false; }그러면 2번 코드가 실행되면 3번 코드처럼 되는 거라고 이해하고 있습니다. (hashIndex는 편의상 0이라고 하겠습니다.) 0번 인덱스에 있는 LinkedList <Object> 타입의 연결리스트가 나옵니다. 다음으로 if문으로 들어갑니다. 그리고 LinkedList <Object> 타입의 연결리스트(bucket)가(이) m1을 포함하는지 contains 메서드를 통해서 확인합니다. 여기서 질문입니다.질문 1 : MemberOnlyHash 타입의 m1과 비교를 하는데 bucket은 여전히 Object타입입니다. (Object)bucket이 contains를 사용하는데 bucket은 MemberOnlyHash 클래스가 오버라이딩 한 것을 어떻게 알고 찾아가는지 이해가 되지 않습니다.
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 7. 직접 구현하는 Set3
여기에서 hashCode의 값이 선생님과 다르게 출력되는데 잘못된 게 맞나요?문자 고유의 값이니까 같은 문자라면 어느 컴퓨터나 같은 hashCode가 출력되야 하는 게 맞는거죠??public class MyHashSetV2Main2 { public static void main(String[] args) { Member hi = new Member("hi"); Member jpa = new Member("JPA"); // 대문자 주의! Member java = new Member("java"); Member spring = new Member("spring"); System.out.println("hi.hashCode() = " + hi.hashCode()); System.out.println("jpa.hashCode() = " + jpa.hashCode()); System.out.println("java.hashCode() = " + java.hashCode()); System.out.println("spring.hashCode() = " + spring.hashCode()); MyHashSetV2 set = new MyHashSetV2(10); set.add(hi); // Member 타입의 인스턴스를 myHashSetV2에 넣음. set.add(jpa); set.add(java); set.add(spring); System.out.println("set = " + set); //검색 Member searchValue = new Member("JPA"); boolean result = set.contains(searchValue); System.out.println("hi.contains(" + searchValue + ") = " + result); } //출력 결과 hi.hashCode() = 3329 jpa.hashCode() = 73659 java.hashCode() = 3254818 spring.hashCode() = -895679987