728x90

Comparator 인터페이스의 유용한 정적 메소드 (static method)를 소개하고자 한다.

 

우선 comparing이라는 메소드의 인자는 Function 타입이다. 따라서 주로 람다식이나 메소드참조를 이용한다.

static 메소드는 메소드 이름 앞에 클래스 이름(또는 인터페이스 이름)까지 붙여서 외우는 것이 좋다.

Comparator.comparing(Function 객체) 이렇게 통째로 기억해 두자.

 

그리고 thenComparing이라는 메소드도 있다.

이름만 들어도 짐작이 가겠지만 어떤 기준으로 정렬한 후 그래도 똑같다면 이 기준으로 정렬하라는 것이다.

이 메소드의 인자는 Function 객체를 넣어도 되고 Comparator 객체를 넣어도 된다. 따라서 이 메소드도 인자로 람다식이나 메소드 참조가 주로 들어간다.

thenComparing 메소드는 이 뒤에도 계속 thenComparing(기준).thenComparing(기준) 이런 식으로 메소드 체이닝이 가능하다. thenComparing 메소드의 반환타입도 Comparator이기 때문이다.

import java.util.Arrays;
import java.util.Comparator;

public class PersonTest {
    public static void main(String[] args) {
        Person[] list = {new Person("홍길동", 30), new Person("황진이", 20), new Person("이몽룡", 30)};
        Arrays.sort(list, Comparator.comparing(Person::getAge).thenComparing(Person::getName));
        for (Person p : list) {
            System.out.println(p);
        }
    }
}
class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return name + " (" + age + ")";
    }
}

나이순으로 정렬하되 나이가 같은 경우 이름순으로 정렬된 것을 볼 수 있다.

728x90
728x90

학교 연구실 PC에서 작업하던 것을 집에서도 이어서 하고 싶어서 집에 와서 내 노트북에 내 레파지토리를 clone해왔다. 그러고 나서 코드를 수정하고 add와 commit까지는 잘 했다. 그런데 push가 안 되는 것이었다.

remote: Permission to 깃허브 주소 denied to
atal: unable to access 내 깃허브 주소 The requested URL returned error: 403
뭐가 치명적이라는건지 fatal이라면서 403 에러가 났다.

해결방법은 다음과 같다.
1. 제어판의 자격 증명 관리자에 들어간다. (아래 사진과 같이 검색해서 들어가는 것이 빠름)


2. Windows 자격 증명 클릭


3. git:https://github.com을 화살표 버튼을 눌러서 열어준다.


4. 편집 버튼을 누른다.


5. 사용자 이름과 비밀번호를 각각 깃허브의 아이디, 비밀번호로 바꿔준다.


6. 그리고 저장하면 끝. 이제 push가 될 것이다.

728x90

'GitHub' 카테고리의 다른 글

[GitHub] warning: LF will be replaced by CRLF in gradlew 에러  (0) 2020.02.01
728x90

겨울방학 때 Git 설치 및 사용법 익히기 [Git으로 시작하는 협업 및 오픈소스 프로젝트 1강]아무것도 하는 게 없어서 앱 하나를 만들어보겠다고 결심했다.

개강 전에 플레이스토어에 업로드 하는 게 목표이다.

요즘은 취업할 때 깃허브 주소를 적어서 내는 것도 굉장히 일반적이라는데 이제부터는 모든 프로젝트를 깃허브에 올려서 차곡차곡 쌓아야겠다.

깃허브 사용법을 잘 몰라서 유튜브를 보면서 깃을 설치하고 https://youtu.be/rhP5pseOJc0

동빈나 - Git 설치 및 사용법 익히기 [Git으로 시작하는 협업 및 오픈소스 프로젝트 1강]

처음으로 제대로 깃허브에 푸쉬도 했다.

그리고 오늘 안드로이드 개발을 하면서 다시 배운 (배웠었지만 잊어버렸던) 자바의 날짜 사용법

LocalDate date = LocalDate.now(); // LocalDate 객체 생성
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-M-d");
String d = date.format(dateTimeFormatter); //문자열로 변환
728x90
728x90

백준에서 가장 많이 풀린 문제 TOP 100중 한 문제

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

 

n = input()
count = {'0' : 0, '1' : 0, '2' : 0, '3' : 0, '4' : 0, '5' : 0, '6' : 0, '7' : 0, '8' : 0}
for i in n:
    if i == '0':
        count['0'] += 1
    elif i == '1':
        count['1'] += 1
    elif i == '2':
        count['2'] += 1
    elif i == '3':
        count['3'] += 1
    elif i == '4':
        count['4'] += 1
    elif i == '5':
        count['5'] += 1
    elif i == '6' or i == '9':
        count['6'] += 1
    elif i == '7':
        count['7'] += 1
    elif i == '8':
        count['8'] += 1
a, b = divmod(count['6'], 2)
if b == 1:
    count['6'] = count['6'] // 2 + 1
else:
    count['6'] = count['6'] // 2
max = 0
for i, j in count.items():
    if j > max:
        max = j
print(max)
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1463번 1로 만들기  (0) 2020.01.21
[백준] 1261번 (시간 초과)  (0) 2020.01.21
[백준] 2747번 피보나치 수  (0) 2020.01.20
[백준] 5622번 다이얼  (0) 2020.01.20
[백준] 1316번 그룹 단어 체커  (0) 2020.01.20
728x90

백준에서 가장 많이 풀린 문제 TOP 100중 한 문제

 

2747번: 피보나치 수

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는

www.acmicpc.net

n = int(input())
li = [0] * (n + 1)
li[0] = 0
li[1] = 1
for i in range(2, n + 1):
    li[i] = li[i - 2] + li[i - 1]
print(li[n])
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1261번 (시간 초과)  (0) 2020.01.21
[백준] 1475번 방 번호  (0) 2020.01.20
[백준] 5622번 다이얼  (0) 2020.01.20
[백준] 1316번 그룹 단어 체커  (0) 2020.01.20
[백준] 2839번 설탕배달  (0) 2020.01.20
728x90

백준에서 가장 많이 풀린 문제 TOP 100중 한 문제

 

5622번: 다이얼

문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

www.acmicpc.net

 

s = input()
total = 0
for i in s:
    if i == 'A' or i == 'B' or i == 'C':
        total += 3
    elif i == 'D' or i == 'E' or i == 'F':
        total += 4
    elif i == 'G' or i == 'H' or i == 'I':
        total += 5
    elif i == 'J' or i == 'K' or i == 'L':
        total += 6
    elif i == 'M' or i == 'N' or i == 'O':
        total += 7
    elif i == 'P' or i == 'Q' or i == 'R' or i == 'S':
        total += 8
    elif i == 'T' or i == 'U' or i == 'V':
        total += 9
    elif i == 'W' or i == 'X' or i == 'Y' or i == 'Z':
        total += 10
print(total)
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1475번 방 번호  (0) 2020.01.20
[백준] 2747번 피보나치 수  (0) 2020.01.20
[백준] 1316번 그룹 단어 체커  (0) 2020.01.20
[백준] 2839번 설탕배달  (0) 2020.01.20
[백준] 4344번 평균은 넘겠지  (0) 2020.01.20
728x90

백준에서 가장 많이 풀린 문제 TOP 100중 한 문제

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

n = int(input())
count = 0
for i in range(n):
    li = []
    s = input()
    flag = True
    for j in s:
        if j in li:
            if li[-1] == j:
                continue
            else:
                flag = False
                break
        else:
            li.append(j)
    if flag:
        count += 1
print(count)
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 2747번 피보나치 수  (0) 2020.01.20
[백준] 5622번 다이얼  (0) 2020.01.20
[백준] 2839번 설탕배달  (0) 2020.01.20
[백준] 4344번 평균은 넘겠지  (0) 2020.01.20
[백준] 10172번 개  (0) 2020.01.20
728x90

백준에서 가장 많이 풀린 문제 TOP 100 중 한 문제

 

2839번: 설탕 배달

문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수

www.acmicpc.net

1월 20일에 파이썬으로 풀어보고

n = int(input())
five = n // 5
three = 0
find = False
while five >= 0:
    if five * 5 + three * 3 == n:
        find = True
        break
    while five * 5 + three * 3 <= n:
        if five * 5 + three * 3 == n:
            find = True
            break
        three += 1
    if find:
        break
    five -= 1
if find:
    print(five + three)
else:
    print(-1)

두 달 반 후인 4월 6일에 또 다시 풀어보았다.

이번에는 C++로 풀어봤다.

#include <iostream>
using namespace std;


int main() {
	int n;
	cin >> n;
	int count = 0;
	while (true) {
		if (n < 0)
			break;
		if (n % 5 == 0) 
			break;
		else {
			n -= 3;
			count++;
		}
	}
	if (n < 0) cout << -1;
	else cout << count + n / 5;
	return 0;
}

3kg 짜리 설탕을 최대한 적게 쓰고 5kg 짜리 설탕을 최대한 많이 써야되기 때문에 n이 5로 나눠떨어질 때까지 3을 빼주었다. 빼 줄 때마다 3kg짜리 설탕을 한 봉지 사용하는 것이기 때문에 count 변수에 1씩 더해주었다. 그 과정에서 n이 음수가 되면 바로 while문을 빠져나와 -1을 출력하게 했고 5로 나눠떨어지면 while문을 빠져나와 count와 n/5를 더해주었다. count는 3kg짜리 설탕의 개수이고 n / 5는 5kg짜리 설탕의 개수이다. 그 둘을 더해주면 된다.

728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 5622번 다이얼  (0) 2020.01.20
[백준] 1316번 그룹 단어 체커  (0) 2020.01.20
[백준] 4344번 평균은 넘겠지  (0) 2020.01.20
[백준] 10172번 개  (0) 2020.01.20
[백준] 10988번 팰린드롬인지 확인하기  (0) 2020.01.19
728x90

백준에서 가장 많이 풀린 문제 TOP 100 중 한 문제

 

4344번: 평균은 넘겠지

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자

www.acmicpc.net

기억하자 파이썬에서 반올림은 round(실수, 소수점 아래 몇 째자리까지)

0까지 다 표현하고  싶다면 print("%.3f"%5.2156545435) 이런 식으로

c = int(input())
li = []
for i in range(c):
    from sys import stdin
    li.append(list(map(int, stdin.readline().split()))[1:])
above_avg = []
for i in li:
    avg = sum(i) / len(i)
    count = 0
    for j in i:
        if j > avg:
            count += 1
    above_avg.append(100 * count / len(i))
for i in above_avg:
    print("%.3f"%i, end="")
    print("%")
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1316번 그룹 단어 체커  (0) 2020.01.20
[백준] 2839번 설탕배달  (0) 2020.01.20
[백준] 10172번 개  (0) 2020.01.20
[백준] 10988번 팰린드롬인지 확인하기  (0) 2020.01.19
[백준] 17072번 아스키 아트  (0) 2020.01.19
728x90

백준에서 가장 많이 풀린 문제 TOP 100중 한 문제이다.

 

10172번: 개

문제 아래 예제와 같이 개를 출력하시오. 입력 출력 예제 입력 1 복사 예제 출력 1 복사 |\_/| |q p| /} ( 0 )"""\ |"^"` | ||_/=\\__|...

www.acmicpc.net

이게 정답률이 왜 30%대인거지?

print("|\_/|")
print("|q p|   /}")
print('( 0 )"""\\')
print('|"^"`    |')
print("||_/=\\\\__|")
728x90

+ Recent posts