목록콤퓨타 왕왕기초/PS (135)
파게로그
문제 링크: 10814번 나이순 정렬 https://www.acmicpc.net/problem/10814 주의해야 할 사항에 대해 주석으로 달아두었다. import java.util.*; class Member implements Comparable { // Comparable 주의 int age; String name; public Member(int age, String name) { this.age = age; this.name = name; } public String toString() { return age + " " + name; // 문자열 연결할 때, 문자를 연결하면 ASCII 코드값이 연결됨 // ' '가 아니라 " "를 연결해야 함 } @Override public int compar..
문제 링크: N번 제목 https://www.acmicpc.net/problem/문제번호 파이썬은 확실히 편하긴 하다... 말도 안되게 편하다고 생각한다. 다만 항상 Java에도 익숙해지는 것이 필요하다! Python # 입력 n = int(input()) words_set = set() for i in range(n): words_set.add(input()) # 리스트로 변환 words_list = list(words_set) # 정렬 sorted_words_list = sorted(words_list, key = lambda x: (len(x), x)) # 출력 for item in sorted_words_list: print(item) Java import java.util.ArrayList; i..
문제 링크: 6603번 로또 https://www.acmicpc.net/problem/6603 자료구조 시간에 순열을 재귀로 구현하는 것을 배울 때, 조합은 어떻게 할 수 있을지 고민했었던 기억이 있다. 아이디어 자체는 비슷하다. 순열에서 원래의 배열대로, 그리고 swap한 배열대로 출력하는 것처럼 조합도 마찬가지로 어떤 원소가 포함된 것, 그리고 그렇지 않은 것으로 나누면 생각하기가 쉽다. Python으로 구현하면 mutability 때문에 조금 귀찮아질 것 같아서 C++로 구현했다. #include #include #define LOTTO_TARGET_SIZE 6 using namespace std; void comb(vector &arr, vector &combs, vector cur, int st..
문제 링크: 1991번 트리 순회 https://www.acmicpc.net/problem/1991 순회하는 것보다 Java에서 char과 int 사이 캐스팅이 더 헷갈렸다. 왜 따로따로 캐스팅하면 계산이 안 되는지에 대해서 나중에 다시 알아봐야겠다. 그리고 트리의 노드들이 순서대로 제시되지 않을 때에는 해당하는 행에 맞추어 넣어준다. import java.util.Scanner; import java.util.ArrayList; public class Main { public static void printPath(ArrayList path) { for (int i = 0; i < path.size(); i++) { char cur = (char)(path.get(i) + 'A'); System.out..
문제 링크: 2448번 별 찍기 - 11 https://www.acmicpc.net/problem/2448 머릿속에서 프랙탈을 그려나가는 것과, 실제로 코드를 이용해서 출력하는 것과의 차이는 아마 쪼갤 때 공백을 어떻게 포함하느냐의 문제가 핵심인 듯하다. 삼각형은 단순히 '가운데 정렬'로 보이지만 앞에 그 만큼의 공백이 앞에 있어야 한다든가... 그런데 여기서 삼각형에 접하는 사각형만큼을 하나의 덩어리로 볼 것인지 또는 그 앞의 공백을 모두 포함하는지부터 생각을 하는 편이 좋다. 결론은, star(n)이 호출하는 star(prev)가 return하는 배열이 삼각형에 접하는 사각형만큼만 딱 그려내주고, 그 앞의 공백들은 어차피 점차 길이가 감소하는 반쪽짜리 삼각형이기에 맨 마지막에 삽입해줄 수 있다. 이걸..
문제 링크: Lv.2 124 나라의 숫자 https://programmers.co.kr/learn/courses/30/lessons/12899 나만 Lv.2라고 안 느껴졌을까...? 처음에 설명 듣고 아아~ 하다가 풀다보니까 생각보다 더 어려웠다. 풀이를 보고서도 아리송한 부분이 남아있는데, 진법 개념이 덜 잡힌 것 같다.생각해보니까, 진법의 변환 과정을 이용하지만, 진법 문제는 아니다. 어떤 자연수를 2진법으로 변환하는 과정을 미리 생각해두자. 14 = 2^3 * 1 + 2^2 * 1 + 2^1 * 1 + 2^0 * 0 우변의 각 항을 base^exp * coef라 표현할 때, coef는 0 또는 coef < base인 자연수이다. 당연하게도, coef가 base가 되어버리면 이는 한 자리 위로 올라가..
Python list.sort(key=None,reverse=False) 리스트의 항목들을 제자리에서 정렬합니다 (인자들은 정렬 커스터마이제이션에 사용될 수 있습니다.) sorted(iterable,*,key=None,reverse=False) iterable의 항목들로 새 정렬된 리스트를 돌려줍니다. 키워드 인자로만 지정해야 하는 두 개의 선택적 인자가 있습니다. key는 하나의 인자를 받는 함수를 지정하는데, iterable의 각 요소들로부터 비교 키를 추출하는 데 사용됩니다(예를 들어, key=str.lower). 기본값은 None입니다(요소를 직접 비교합니다). reverse는 논리값입니다. True로 설정되면, 각 비교가 뒤집힌 것처럼 리스트 요소들이 정렬됩니다. 예전 스타일의 cmp 함수를 k..
문제 링크: 10989번 수 정렬하기 3 https://www.acmicpc.net/problem/10989 단순히 counting sort를 쓴다고 해서 통과하는 문제는 아니고, 알고리즘 문제를 풀 때 한 번쯤 거쳐가는, '불편하지만 빠른' 입출력 방식을 사용해야 하는 문제다. 자바의 경우, 입력에 대해서 다음과 같은 설명을 할 수 있다. Scanner versus. BufferedReader 일반적으로는 Scanner 클래스를 이용하는데, 버퍼 크기가 1KB로 작고, regExp를 통해 구문 분석 및 지정된 타입으로의 파싱을 진행하며, 동기화되어 있지 않아 멀티쓰레딩 환경에서 안전하지 않으며, 개발자가 Exception Handling을 진행하지 않는다. 반면 BufferedReader의 경우, 버퍼..