수학적?으로 접근해서 매우 복잡하게 해석했다.. 좌표로 생각하면서 푸니까 서로 겹치는 부분을 찾기 위해 좌표가 주어지면 해당 좌표가 다른 좌표와 겹치는 지, 아닌지 검사하기 위해 조건문으로 다 걸러서 찾아냄 1차 시도 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long s = 0; int n = Integer.parseInt(br.readLine()); int[][] lst = new int[n][2]; fo..
분류 전체보기
d(n)이라는 함수를 만들어서 리스트에 셀프넘버가 아닌 것들을 저장하자 라는 생각으로 접근 시도1 lst = [] def d(n): #셀프넘버가 아닌 것들 num = n + int(n/1000) + int(n%1000/100) + int(n%100/10) + n%10 return num n=0 while(True): n += 1 if d(n) > 10000: break lst.append(d(n)) for i in range(1, 10001): if i not in lst: print(i) 아무리 생각해도 맞는거 같은데 자꾸 출력이 이상하게 나와.... 그래서 왜 이상한지 손으로 노가다로 풀어봤다 저 코드를 실행하면 9999가 출력되는데 n = 9972일때 d(n) = 9999를 반환 하지만 내 코드에서..
처음에 재귀함수로 풀이 하지만 재귀함수로 하면 겹치는 계산이 존재해서 다른 풀이도 찾아보았다. import sys def fibo(n): if n == 0: return 0 elif n
처음에 간단하게 그냥 5로나누고 나머지를 2로 나눠서 나눠떨어지지 않으면 -1출력하면 되는거 아닌가? 했지만 당연히 아니다. 거스름돈이 13원인 경우 5원 한개 2원 4개로 거스름돈을 거슬러 줄 수 있다. 그럼 어떻게 해야할까? 최소한의 동전 개수로 거스름돈을 거슬러 줘야하므로 먼저 5로 나눠주고 cnt= 거스름돈 / 5 저장하고, 나머지 = n % 5 나머지가 2로 나눠지지 않는다면 나머지 += 5로 5원을 회수하고 cnt -= 1을 해준다. (동전 회수 했으므로 cnt도 감소해야함) 그리고 다시 5를 더한 나머지가 2로 나눠지는지 확인.... 위 과정 반복하다가 나머지에 계속 +5를 하다보면 주어진 거스름돈의 값을 넘기는 경우에는 -1을 출력하고 프로그램 종료 import java.util.*; im..
EOF란? EOF는 End Of File의 약자로, 데이터 소스로부터 더 읽을 수 있는 데이터가없음을 나타내는 용어이다. 알고리즘 문제를 풀 때는 주로 입력값을 얼마나 받을지 명시하지 않을 경우 EOF를 사용함. 아래 문제 같은 경우 EOF 사용하여 문제 해결 https://www.acmicpc.net/problem/11034 11034번: 캥거루 세마리2 여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100) www.acmicpc.net EOF 사용법 Scanner 클래스 사용할 경우 scanner 클래스는 hasNext() 메소드를 사용한다. hasNext()는 입력된 토큰이 있으면 ture를 반환, 아니면 false를 반환..
완전 탐색으로 첨탑 높이 비교 시도1 import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws IOException { //첨탑 개수 완전 탐색 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int[] data = new int[n]; st = new StringTokenizer(br.readLine()); for (in..
1차 시도 import sys n = int(input()) lst = [0] * n idx = 0 b = True for _ in range(n): i, j = sys.stdin.readline().rstrip().split() for k in i: if k not in j: lst[idx] = -1 idx += 1 b = False break if b: b = True idx += 1 for i in lst: if i == -1: print("Impossible") else: print("Possible") not in을 사용해서 첫번째 문자열을 하나씩 뜯어서 두번째 문자열에 문자가 포함되는지 확인. 포함 안되면 lst에 테스트 케이스대로 인덱스를 설정(테스트 케이스가 첫번째이면 idx=0)해서 -1..
1차 시도 2점 import sys n, k = map(int, input().split()) data = [tuple(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n)] idx = 0 data = sorted(data, key= lambda x:(x[0], x[1])) for i in range(n): if data[i][0] == 1: idx = i #남학생 시작 idx break w_lst = data[:idx] m_lst = data[idx:] w_grade = [] m_grade = [] for i in w_lst: w_grade.append(i[1]) for i in m_lst: m_grade.append(i[1]) cnt ..
Optional을 남용하면 오히려 성능이 저하된다. 1. Optional.get() 호출 전에 Optional 객체가 값을 가지고 있음을 확신 만약 빈 Optional 객체에 get()메소드를 호출한 경우 NosuchElementException이 발생 → isPresent()로 비어있진 않은지 먼저 확인하자 2. 값이 없는 경우, Optional.orElseGet()을 통해 이를 나타내는 객체를 제공할 것 orElse는 객체가 있는 경우에도 파라미터로 전달된 값이 실행되므로 orElseGet으로 객체가 없을 경우에만 실행되도록 하자 3. 값이 없는 경우, Optional.orElseThrow() 를 통해 명시적으로 예외를 던질 것 값이 없는 경우, 기본 값을 반환하는 대신 예외를 던져야하는 경우도 있다..