Supersett
개발자의 하루
Supersett
Blockchain Dev
전체 방문자
오늘
어제
  • 분류 전체보기
    • 프론트
    • 회사생활
    • 블록체인
    • 프로젝트
      • 창업 프로젝트 (DRF + AWS)
      • Spring 프로젝트
    • [중앙대]멋쟁이 사자처럼
    • 기술서적
    • Problem Solving
      • 알고리즘
    • 일기장
      • 하루 정리
      • 삽질 일기
      • 조급할 때 눌러보기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 비트코인
  • 초보개발자
  • 해커톤
  • 프로젝트
  • 자바
  • Luniverse
  • 취업준비
  • 블록체인 서버설계
  • 니어프로토콜
  • java
  • 블록체인정보가공
  • 멋쟁이 사자처럼
  • 면접준비
  • 국비
  • 멋쟁이 사자처럼 면접
  • 디프만16기
  • 멋쟁이 사자처럼 서류
  • 글리치해커톤
  • 멋쟁이사자처럼 중앙대
  • 국비지원
  • Near Explorer
  • 구글소셜로그인
  • Multichain API
  • 자바스크립트
  • Near Scan
  • 국비교육
  • DEPROMEET
  • 멋사 중앙대
  • 컴퓨터학원
  • 신입개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Supersett

개발자의 하루

[백준] 1931 - 회의실 배정 (그리디 알고리즘)
Problem Solving/알고리즘

[백준] 1931 - 회의실 배정 (그리디 알고리즘)

2022. 7. 8. 13:25

와우 시간초과 대박

[시간초과 요인 분석]

- 이전의 코드는 O(n^2)였지만 O(n)으로 줄어들었다.

- 정렬을 한번 더 했어야 했다.

- 바로 머릿속에 있는대로 구현하기보다는 (모든것을 확인하려고 했었음), 불필요한것은 덜어낸 채로 찾아보는 방법을 더 생각해 보도록 하자.(시간초과와 관련이 있음)

#회의 시작시간 순으로 배열을 정렬한다.
sch=sorted(sch,key = lambda x: [x[1], x[0]])

 

[처음 코드]

import sys

n=int(sys.stdin.readline())
sch=[]

#회의의 시작시간 S , 마치는시간 E 를 sch 배열에 담는다.
for i in range(n):
    S,T=map(int,sys.stdin.readline().split())
    sch.append([S,T])

#회의 시작시간 순으로 배열을 정렬한다.
sch=sorted(sch,key = lambda x: [x[1], x[0]])

#print(sch)
cnt_list=[]
for i in range(n):
    cnt=1
    start_time=sch[i][0]
    end_time=sch[i][1]
    for j in range(i,n):
        if end_time==sch[j][0]:
            cnt+=1
            end_time=sch[j][1]
        elif end_time<=sch[j][0]:
            start_time=sch[j][0]
            end_time=sch[j][1]
            cnt+=1
    cnt_list.append(cnt)

print(max(cnt_list))

[수정 코드]

import sys

n=int(sys.stdin.readline())
sch=[]

#회의의 시작시간 S , 마치는시간 E 를 sch 배열에 담는다.
for i in range(n):
    S,T=map(int,sys.stdin.readline().split())
    sch.append([S,T])

#회의 시작시간 순으로 배열을 정렬한다.
sch=sorted(sch,key = lambda x: [x[1], x[0]])

#print(sch)
cnt_list=[]
cur_time=0
cnt=0
for i in range(n):
    if cur_time==sch[i][0]:
        cnt+=1
        cur_time=sch[i][1]
    elif cur_time<sch[i][0]:
        cnt+=1
        cur_time=sch[i][1]
print(cnt)

 

'Problem Solving > 알고리즘' 카테고리의 다른 글

[백준][파이썬] 1662 - 압축  (0) 2022.07.13
[백준][파이썬] 2504 - 괄호의 값 (런타임에러 발생..해결)  (0) 2022.07.12
[백준]1946 - 신입사원  (0) 2022.07.07
[백준] [파이썬] 11497 - 통나무 건너뛰기  (1) 2022.07.06
[백준][파이썬] - 1263 시간관리  (0) 2022.07.05
    'Problem Solving/알고리즘' 카테고리의 다른 글
    • [백준][파이썬] 1662 - 압축
    • [백준][파이썬] 2504 - 괄호의 값 (런타임에러 발생..해결)
    • [백준]1946 - 신입사원
    • [백준] [파이썬] 11497 - 통나무 건너뛰기
    Supersett
    Supersett
    하루를 돌아보고 공부한 티를 내기 위해 블로그를 만들었습니다.

    티스토리툴바