문제 https://www.acmicpc.net/problem/8393 8393번: 합 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 cnt = int(input()) print(sum(i for i in range(1,cnt+1))) 풀이 간단하게 풀이가 가능해 보여서 직관적으로 풀었다. 이럴경우 시간 복잡도는 O(n). ✔ 하지만 수학적으로 접근하면 1~n 까지의 합은 n(n+1)/2 즉, (n^2 + n)/2 로 한번의 계산으로 도출 가능하며, 이때 시간 복잡도는 O(1)로 대폭 감소한다. ✔ 문제를 풀이할 때 여러 방향으로 생각해보자. 다른 풀이 출처: https://www.acmicpc.net/source/13249601 n = int(i..
분류 전체보기
4. 회원 관리 예제 - 백엔드 개발 4) 회원 서비스 개발 회원 서비스 클래스 생성 회원 서비스: 회원 리포지토리 + 도메인 활용해 비즈니스 로직을 작성하는 부분 (Repository에 비해) 서비스 클래스는 비즈니스에 가깝게 네이밍 해야 함 (∵ 비즈니스 처리하므로) Service 패키지 생성 > MemberService 클래스 생성해 작업 1. MemberRepository 객체 생성 - final : 여러 context에서 단 한번만 할당 될 수 있는 entity를 정의할 때 사용 ➔ 객체 변수 final : 해당 변수에 다른 참조 값 지정 불가능 (재변경 불가능, 다른 객체로 변경 불가능) (✔ 객체의 속성(=필드)는 변경 가능) 2. 메서드 정의 - (1)회원 가입 메서드 (join) 정의 -..
문제 https://www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net - 2월이 28일까지 있다. - 1월 1일이 월요일이다. 코드 month = [31,28,31,30,31,30,31,31,30,31,30,31] days = ["SUN","MON","TUE","WED","THU","FRI","SAT"] m, d = map(int, input().split()) print(days[((sum(month[i] for i ..
문제 https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 코드 #1번 풀이 import sys sum = 0 numlist = sys.stdin.readlines() for c in numlist[1].rstrip(): sum += int(c) print(sum) 풀이 예제 4번을 보지 못하고 주어지는 수가 10 이상일 경우에는 어떻게 구분하지?... 이죠랄 떨고 있었음ㅋ 근데 진짜로 십의자리 이상인 숫자는 어떻게 구분할까?... 일의자리 숫자만 더 한다는 조건은 없었는데.. 어쨌든 문제를 너무 꼬아생각하는건 팩트같다.. 우선 r..
문제 https://www.acmicpc.net/problem/11719 11719번: 그대로 출력하기 2 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 www.acmicpc.net 코드 import sys texts = sys.stdin.read() print(texts, end='') 풀이 그 전에 푼 문제에서 배운 readlines와 read 메서드를 적용할 수 있는 문제다. 단 차이점은 빈 줄이 주어질 수 있고, 각 줄의 앞 뒤에 공백이 있을 수 있다는 것 → strip류 메서드(rstrip, lstrip, strip) 사용X readline..
문제 https://www.acmicpc.net/problem/11718 11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시 www.acmicpc.net 코드 import sys for i in range(100): inputlist = str(sys.stdin.readline().strip()) #입력값 끝에 \n 제거 if inputlist =="": #공백 입력됐을 경우 탈출 break print(inputlist) 풀이 먼젓번에 풀었던 A+B-4문제와 동일하게 적용했다. readline으로 문자열을 읽어올 경우, 끝에..
문제 https://www.acmicpc.net/problem/10951 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 코드 while True: try: a, b = map(int, input().split()) print(a+b) except: break 풀이 우선 처음 문제를 접했을 때 당황스러웠다.. 테스트 케이스에 대한 세부적인 설정이 없었기 때문... 몇 번을 반복해야 하는지 갈피를 못잡고, 우선 while True: 로 무한 반복을 돌렸는데, 당연히 오류가 났다ㅎ 테스트 케이스 횟수에 대한 특정 언급이 없는 경우에는, 테스트 케이스가 입력되지 않는 경우를 끝으로 가정한다. ➔ try - except 문을 ..
Stream이란? 배경 Array (혹은 Collection)의 elements들을 이용해야 하는 경우 기존에는 for/ foreach문을 통해 반복적으로 Array(or Collection)안 요소들을 하나씩 꺼내서 다뤄야 했음. 시간 복잡도 증가, 루프 여러번 돌 가능성 존재함 ♘Collection - 데이터의 집합, 그룹 - List, Set, Queue 크게 3가지 상위 인터페이스로 분리 가능 Ⅰ) Set [구현 클래스: HashSet, TreeSet] - 순서 없는 데이터의 집합 (중복 비허용 - 수학적 집합) Ⅱ ) List [LinkedList, Vector, ArrayList] - 순서 있는 데이터 집합 (중복 허용) Ⅲ ) Queue [LinkedQueue, PriorityQueue] -..
4. 회원 관리 예제 - 백엔드 개발 1) 비즈니스 요구사항 정리 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 아직 DB가 선정되지 않았음을 가정하고 개발 일반적인 웹 애플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할, API 생성 시 컨트롤러 역할 서비스 : 서비스 클래스의 핵심 비즈니스 로직이 들어가 있음 (ex. 회원 가입 중복 불가) 도메인 : DB에 주로 저장되고 관리되는 (ex. 회원, 주문, 쿠폰 ...) 비즈니스 도메인 객체 리포지토리 : DB에 접근, 도메인 객체를 DB에 저장하고 관리 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 돌아가도록 구현한 계층 클래스 의존관계 아직 DB가 선정되지 않음 → 인터페이스로 설계 (회원 리포지토리에)..
# silver 4 문제 https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 코드 Ver 1) #num이 소수인지 아닌지 판별하는 함수 def PrimeNum(num): if num == 0 or num == 1: # 0, 1에 대해 예외처리를 해줘야 함! return False for k in range(2, num): if num % k == 0: #2~n-1 로 나눴을 때 나눠짐 ==> 소수가 아님 return False return True #범위 i..
3. API 정의 안드로이드, ios 개발 시 서버는 json [= data format] 으로 고객에게 전달하는 방식 + 서버끼리 통신할 때도 사용 정적 컨텐츠 제외) 방식 2가지 : html로 vs 데이터 바로 1. MVC 방식 → View를 찾은 뒤, template engine으로 화면 랜더링 → html을 웹브라우저에 넘겨주는 방법 2. API 방식 → 데이터 바로 내림 API와 MVC 방식의 차이 API는 별도의 View 생성 없이 http로 문자가 그대로 넘어간다 HelloController에 helloString 생성 (전달 값이 문자일 경우) 마찬가지로 @GetMapping으로 url과 매칭시켜주고, @RequestParam으로 입력값을 받아온다 차이점은 @ResponseBody가 추가 ..
# bronze 3 문제 https://www.acmicpc.net/problem/2460 2460번: 지능형 기차 2 최근에 개발된 지능형 기차가 1번역(출발역)부터 10번역(종착역)까지 10개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. www.acmicpc.net 코드 1. max() 사용 O people = [0] #처음엔 기차에 0명 for i in range(1,11): #역 10개 순회 cnt =list(map(int,input().split())) #하차 = cnt[0]명, 승차 = cnt[1] people.append(people[2*(i-1)]-cnt[0]) #people[odd] = 승차 후 탑승객 - 하차 탑승..