여느 때와 다름없이 알고리즘 문제를 풀고 있었다. (문제는 [프로그래머스 - 여행경로] 참고) 문제 초반부에서 만약 경로가 [a, b], [b, c], [c, a] 처럼 주어졌다고 하면, a -> b라는 경로들의 방향을 담고 싶다. 하지만 a가 str형이라 인덱스(정수 고정) - 값처럼 사용할 수 없어 리스트를 못 사용했다. 그래서 키(문자 가능) - 값(문자 가능)처럼 dictionary를 사용해서 문제를 풀었다. 나는 아래 코드처럼 사용했다. tickets = [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] t_dict = dict() for i in range(len(tickets)): if tickets..
exit()만 적으려다가 양이 적은가 싶기도 하고 그냥 자주 안써서 손에 안익은(?) 함수들을 좀 적어봤다. 1. exit() 코드를 강제 종료하고 싶을 때 사용하는 함수 break, contunue들이랑 헷갈릴 수 있는데 얘내는 반복문을 벗어나는(제어하는) 함수이다. 기본적인 사용법은 아래와 같다. exit(0) # 성공적 프로그램 종료 (EXIT_SUCCESS) exit(1) # 성공적X 프로그램 종료 (EXIT_FAILURE) quit() # (SystemExit) sys.exit("성공적으로 프로그램 종료") # SystempExit: 성공적으로 프로그램 종료 근데 뭐 다 모르겠고 거의 exit(0)만 알면 된다. 사용했던 이유는 3차원 배열에서 삼중 for문에서 -1출력하고 끝내야 했을 때 사용..
round() 함수 1. 산술평균 : N개의 수들의 합을 N으로 나눈 값 첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다. 위에서 주어진 것 처럼 산술평균을 구해야했었는데, 그냥 몫 나누기, 나눈 값을 int()로 감싸기 이렇게 두 방법으로 해봤다. 근데 다 안되길래 소수점 이하 첫째 자리 반올림하는 거랑 정답이 다르겠거니 했긴 했는데 사용법을 모르겠어서 검색해봤다. 자세한 문제는 [백준] 2108번 - 통계학 참고 아래처럼 round(실수, n) 형식으로 사용한다. (round(1.55555, 1) # 1.6 (round(1.55555, 0) # 2 Notion Link : https://solar-textbook-084.notion.site/round-6785865..
사전(Dictionary) 자료형 매번 딕셔너리 만들 때, 자꾸 버벅거리길래 기록용 import sys input = sys.stdin.readline n = int(input()) lst = list(map(int, input().split())) # Key Value 이렇게 설정 for i in lst: if i in answer: answer[i] += 1 else: answer[i] = 1 [3. 람다식] 이용하여 Keys, Values 정렬 출력 가능 정수(Integer)형 출력 정수+문자 같이 출력할 때 num1, num2 = 5, -10 print("%d와 %d는 다르다" %(num1, num2)) # % 사용 print(f"{num1}와 {num2}는 다르다") # f문자열 print(fo..
유클리드 호제법 유클리드 호제법은 두 수의 최대공약수를 구하는 알고리즘이다. 이 알고리즘은 두 수를 나눈 나머지를 이용해 최대공약수를 구하는 방법이다. 먼저, 큰 수를 작은 수로 나눈 나머지를 구하고, 작은 수를 이전에 구한 나머지로 나눈 나머지를 구한다. 이 과정을 나머지가 0이 될 때까지 반복하다 마지막으로 구한 나머지가 최대공약수가 된다. 조금 더 구체적으로 예를 들자면 49와 21가 있다고 생각해보자 49를 21로 나누어 떨어지지 않으니까 49를 21로 나눈 나머지 값은 7이다. 21을 7로 나누면 나누어 떨어진다.(나머지가 0이 될 때까지 반복한다는 것이 이 뜻) 즉 7이 최대공약수가 되는 것 아래 백준 문제를 풀다가 보게 된 수학공식? 알고리즘? 인데 코드로는 아래처럼 볼 수 있다. [백준] ..
브루트 포스 브루트 포스(brute force), 키 전수조사(exhaustive key search) 또는 무차별 대입(無差別代入)은 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 흔히 암호학에서 연구되나, 다른 알고리즘 분야에서도 사용되고 있다. 문제를 풀다가 리스트, 문자열 다른 방법보다 그냥 하나씩 세는게 더 빠르고 간단할 때 사용 사실 난생 처음 들어보는 단어라서 기록했다. + 추가 문자열에서 패턴 매칭이 어떤 문자열(target) 내부에 다른 문자열(pattern)이 존재하는지를 검증하는 과정을 표현하는 것인데, 이때 존재하는지 찾고자 하는 문자열을 패턴이라고 부른다. 문자열에서의 브루스 포트는 가장 기본적인 방법으로 문자열을 비교해가며 패턴 매칭을 하는 방..
[백준] 10951번 A+B - 4 문제 내용 자체는 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 라는 문제인데 몇 번 입력받을 것인지 주어지지 않았다. 그래서 알아서 입력이 멈추면 정지해야 하는데 솔직히 어떻게 할 지 몰랐다. 찾아본 결과 try except를 사용하는 것 같아서 정리해보려고 한다. try except while True: try: A, B = map(int, input().split()) print(A+B) except: break # try: A, B에 int형이 들어가면 A+B 출력 # except: try에 대한 에러 발생 시 break # while이 가장 큰 범위이기 때문에 에러가 생기면 반복이 멈춘다. while과 try except whil..