none
C# 스크립트 질문드립니다 RRS feed

  • 질문

  • https://kin-phinf.pstatic.net/20180906_171/1536236950801HdySR_PNG/1.png?type=w620

    이해가 쉽도록 이미지첨부를 하려했으나 첨부가안되서 링크로 남깁니다

    어떤학교의 이상항교칙이 있습니다
    등교시간동안 전 인원을 등교순서대로 운동장에 집합시켜 1열로 세웁니다
    등교시간 막바지에 들어온 꼴찌가 제일 마지막에 섭니다: 이로서 전교생대열이 완성됩니다
    꼴찌등교생기준으로 마지막 20명을 추려냅니다
    마지막 20명중 꼴찌의키 n번째의키(정해지지않은 특정값)를 사용해 기준키를정합니다
    그리고 교문이 닫힌이후 등교하는 지각생들은 기준키를 넘지못하면 벌을 받습니다
    근데 제가 C# 쌩 초짜라 모르겠습니다
    방법을 모르겠습니다.
    n번째의 조건
    -n번째의 앞으로5명(학생포함6명)중, 뒤로5명(학생포함6명)중  키가 30cm이상(초과x) 큰키가 있음
    -n번째는 앞으로5명중 제일작고, 뒤로5명중 제일작음


    기준키선정 조건
    1.
    if( 마지막20명중에 n번째가 1명이상 있다면)//(또는 n번째의키가 있다면 )
    제일마지막 n번째의키(제일마지막이니까 A의 키가 되겠죠)가 기준키가 된다
    else( 마지막20명중에 n번째가 있는게 아니면 )
    꼴찌의키가 기준키가된다
    2.
    if( 마지막20명중에 n번째가 1명이상 있다면)//(또는 n번째의키가 있다면 )
    (키가)제일작은 n번째의키(A와 B중에 더작은 B의 키가 되겠죠)가 기준키가 된다
    else( 마지막20명중에 처음 n번째가 있는게 아니면 )
    꼴찌의키가 기준키가된다
    3.
    if( 마지막20명중에 n번째가 1명이상 있다면)//(또는 n번째의키가 있다면 )
    (몸무게가)제일작은 n번째의키(그림엔 안나와있지만 어쩃든 A B 둘중한명의 키가겟죠)가 기준키가 된다

    else( 마지막20명중에 처음 n번째가 있는게 아니면 )
    꼴찌의키가 기준키가된다
    이걸 C#으로 작성하려합니다
    어찌저찌 컴파일 성공해을경우 런타임에러가떠서 확실히알고있지않은부분은 그냥 비워뒀습니다
    사용자가 만든 클래스인것같습니다
    학교
    학교.등교시간  (System.DateTime)
    학교.전교생대열   (System.Collections.ObjectModel.ObservableCollection < >)
    학교.전교생대열.Last().키;  (double)
    학교.전교생대열.Last().몸무게;  (double)
    학교.전교생대열.Last().교문통과시간;  (string)
    정확히는 모르겠는데 이정도인것같습니다
    그리고 제공데이터상 학생이라는 개념이 없습니다
    따라서 몇번째의 키 몸무게 이런식으로 사용해야합니다
     --------------------------------------------------------------------------------------------------------------
    var n번째의키 =new double();// 이렇게 암시적 선언하는거 맞나요?
    var n번째 = 학교.전교생대열.First(w=>w.키 == n번째의키);// 학교.전교생대열중에 있으니까 이렇게 했는데 맞는지모르겠습니다  First가 맞는지 모르겠네요
    if (n번째 !=null)//n번째가 널값이 아니라면,     런타임에러 방지차 넣었습니다
    {
    var n번째의위치 = 학교.전교생대열.IndexOf(n번째);
    var n번째_앞으로5명 = 학교.전교생대열.Skip(n번째의위치 - 5);            ;//이거 맞나요? 잘 모르겠네요
    var n번째_뒤로5명 =                 ;//모르겠습니다
    var n번째앞뒤_총11명 =                 ;//모르겠습니다


    if( n번째_앞으로5명.Max(w=>w.키) - n번째의키 >=30 && n번째_뒤로5명.Max(w=>w.키) - n번째의키 >=30 ) //앞뒤 각 키차이가 30이상이라면 
    {
        if( n번째앞뒤_총11명.Min(w=>w.키) == n번째의키)//11명중 제일작은키가 n번째의 키라면
        {
        n번째의키=                    ;//모르겠습니다
        }
    }
    }
    var 기준키 = new double();
    var 꼴찌등교시간 = 학교.등교시간.ToString("yyyyMMddHHmm");//  시간개념이 사용됩니다
    var 꼴찌 = 학교.전교생대열.Where(w=>w.교문통과시간 == 꼴찌등교시간).FirstOrDefault();
    if (꼴찌 !=null)//꼴찌가 널값이 아니라면,     런타임에러 방지차 넣었습니다
    {
    var 꼴찌의위치 = 학교.전교생대열.IndexOf(꼴찌);
    var 꼴찌앞으로20명 = 학교.전교생대열.Skip(꼴찌의위치 - 20);            ;//이거 맞나요? 잘 모르겠네요

    if( 꼴찌앞으로20명.Count(w=>w.키 == n번째의키)  >= 1  )//n번째의키가 1개 이상 있다면....... 맞나요?
    기준키 = n번째의키;//기준키가 n번째의키가됩니다          2명이상일경우 20명중 마지막 n번째의 키를 구해야하는데  꼴찌앞으로20명.Last().n번째의키;  이렇게하면 안되더라구요
    else // if가 아니라면
    기준키 = 꼴찌.키;// 기준키가 꼴찌의키가 됩니다
    }
    ---------------------------------------------------------------------------------------------------------------
    메서드도 모르고 람다식도 모르고 쌩초짜라 너무 어렵네요ㅠ
    이 스크립트 완성좀 부탁드립니다 ㅜ_ㅜ


    • 편집됨 독스 2018년 9월 19일 수요일 오전 8:35
    2018년 9월 19일 수요일 오전 8:30